Como muchos ya sabréis, PHP permite definir funciones con parámetros opcionales, otra funcionalidad que no es tan conocida, es que permite crear funciones que aceptan un numero arbitrario de parámetros.
Veamos una función que permite argumentos opcionales:
<?php
// Funcion que acepta 2 parametros opcionales
function dummy($parm1 = '', $parm2 = '') {
echo "Parametro 1: $parm1 <br />";
echo "Parametro 2: $parm2 <br />";
}
dummy('Hola','mundo!');
?>
Ahora vamos a ver como crear una función que acepte cualquier numero de argumentos, para ello vamos a utilizar la función func_get_args (http://us2.php.net/manual/en/function.func-get-args.php) , que devuelve un array numérico con los argumentos pasados a la función.
<?php
// La lista de argumentos es vacia
function sinArgumentos() {
// Devuelve un array con los argumentos
// pasados a la funcion
$argumentos = func_get_args();
foreach ($argumentos as $k => $v) {
echo "Argumento: ".($k+1).": $v <br />";
}
}
sinArgumentos();
// No imprime nada
sinArgumentos('Hola', ' mundo ',' maravilloso!');
// Imprime los argumentos pasados
?>
Esta función nos puede ser muy útil si pensamos crear un pequeño framework o librería. Abajo dejo otro ejemplo con una función que suma un numero indefinido de números.
<?php
function suma(){
$s=0;
foreach(func_get_args() as $a) $s+= is_numeric($a) ? $a : 0;
/*
* Comprueba si el valor introducido es un numero,
* si no, se toma como un cero
*/
return $s;
};
print suma(1,2,3,4,5,6,7,9,10); // Devuelve 47
print suma(1,3,3,7); // Devuelve 14
print suma(false,array(),5,5);
/*
* Devuelve 10, ya que, el array y false lo
* toman como un cero
*/
?>
No es nada del otro mundo pero nos puede venir muy bien este tipo de funciones en nuestras aplicaciones. Seguramente muchos ya conocían esta función.
Interesante la función de los parámetros indefinidos.
Bueno el articulo xD
Como lo dijiste, es muy útil la función para implementarla en librerías.
Saludos.
Muy buena funcionalidad, si señor ;-) . Si lo hubieras puesto hace una semana me habria sido mejor porke estaba buscando esto mismo y lo termine por encontrar Google-ando.
Se deberis UPear de vez en cuando este tema, o bien realizar un tema recopilatorio de "trucos" parecidos y ponerle chincheta