jueves, 4 de octubre de 2007

Parametros flexibles, retornos duros

Al programar una función, o un método de una clase, siempre es lo mejor poder recibir cualquier tipo de parámetro. Ver si es más cómodo mezclar dos parámetros en uno, usando un array, o si un dato puede ser de varios tipos. Todas estas cosas hay que tenerlas en cuenta para que luego sea menos difícil trabajar con lo que ya está hecho. Otra cosa que debemos intentar es siempre devolver el mismo tipo de dato, incluso si no se pudo realizar lo que se esperaba, entonces si se debe devolver un array, pero hubo un error podemos devolver un array vacío en vez de false o null. Un ejemplo simple de esto



function select($nombre, $valores = array(), $seleccionado = '', $atributos = array())
{
if (!is_array($valores) || count($valores) == 0)
{
return '';
}

if (is_string($nombre))
{
if (is_array($atributos))
{
$atributos['name'] = $nombre;
} else
{
$atributos .= ' name="' . htmlentities($nombre) . '"';
}
}
$out = '<select';
if (is_array($atributos))
{
foreach ($atributos as $atributo_nombre => $atributo_valor)
{
$out .= ' ' . $atributo_nombre . '="' . htmlentities($atributo_valor) . '"';
}
} else
{
$out .= ' ' . $atributos;
}
$out .= '>';
foreach ((array)$valores as $valor_clave => $valor_etiqueta)
{
$out .= '<option value="' . htmlentities($valor_clave) . '"' . ($valor_clave == $seleccionado || (is_array($seleccionado) && in_array($valor_clave,$seleccionado)) ? 'selected="selected"' : '') . '>' . htmlentities($valor_etiqueta) . '</option>';
}
return $out . '</select>';
}

echo select('select',array('a' => 'A', 'b' => 'B','c' => 'C','d' => 'D'),array('a'),array('id' => 'select', 'multiple' => 'multiple'));
echo PHP_EOL;
echo select('select',array('a' => 'A', 'b' => 'B','c' => 'C','d' => 'D'),'a','id="select"');
echo PHP_EOL;
echo select('select');

No hay comentarios: