Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: madpitbull_99 en 6 Marzo 2011, 20:44 pm



Título: Funciones con número arbitrario de argumentos [PHP]
Publicado por: madpitbull_99 en 6 Marzo 2011, 20:44 pm
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:
Código
  1. <?php
  2. // Funcion que acepta 2 parametros opcionales
  3. function dummy($parm1 = '', $parm2 = '') {
  4. echo "Parametro 1: $parm1 <br />";
  5. echo "Parametro 2: $parm2 <br />";
  6. }
  7. dummy('Hola','mundo!');
  8. ?>

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.

Código
  1. <?php
  2. // La lista de argumentos es vacia
  3. function sinArgumentos() {
  4.  
  5. // Devuelve un array con los argumentos
  6. // pasados a la funcion
  7. $argumentos = func_get_args();
  8.  
  9. foreach ($argumentos as $k => $v) {
  10. echo "Argumento: ".($k+1).": $v <br />";
  11. }
  12.  
  13. }
  14.  
  15. sinArgumentos();
  16. // No imprime nada
  17.  
  18. sinArgumentos('Hola', ' mundo ',' maravilloso!');
  19. // Imprime los argumentos pasados
  20.  
  21. ?>


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.

Código
  1. <?php
  2.  
  3. function suma(){
  4. $s=0;
  5. foreach(func_get_args() as $a) $s+= is_numeric($a) ? $a : 0;
  6. /*
  7.  * Comprueba si el valor introducido es un numero,
  8.  * si no, se toma como un cero
  9.  */
  10. return $s;
  11. };
  12.  
  13. print suma(1,2,3,4,5,6,7,9,10); // Devuelve 47
  14. print suma(1,3,3,7); // Devuelve 14
  15. print suma(false,array(),5,5);
  16. /*
  17.  * Devuelve 10, ya que, el array y false lo
  18.  * toman como un cero
  19.  */
  20. ?>

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.


Título: Re: Funciones con número arbitrario de argumentos [PHP]
Publicado por: Shell Root en 6 Marzo 2011, 20:52 pm
Interesante la función de los parámetros indefinidos.


Título: Re: Funciones con número arbitrario de argumentos [PHP]
Publicado por: ~ Yoya ~ en 6 Marzo 2011, 22:25 pm
Bueno el articulo xD

Como lo dijiste, es muy útil la función para implementarla en librerías.

Saludos.


Título: Re: Funciones con número arbitrario de argumentos [PHP]
Publicado por: JungleBoogie en 6 Marzo 2011, 22:31 pm
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