Anda di halaman 1dari 10

Inicio Libros Tutoriales Eventos Foro Buscar

Las nuevas funciones varidicas


de PHP 5.6
PHP 5.6 no se publicar hasta dentro de varios meses, pero ya conocemos algunas de
sus nuevas caractersticas. De entre todas ellas, destaca la nueva sintaxis para las
"funciones varidicas".

Una funcin varidica es aquella que admite un nmero variable de argumentos. El


ejemplo ms conocido de estas funciones es sprintf() que formatea una cadena de
texto utilizando un nmero indeterminado de argumentos:

// funcin sprintf() con 2 argumentos


echo sprintf(
"La propiedad '%s' no existe.",
$propiedad
);

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
// funcin sprintf() con 3 argumentos
echo sprintf(
"La propiedad '%s' no existe para el objeto '%s'.",
$propiedad, $objeto
);

// funcin sprintf() con 4 argumentos


echo sprintf(
"La propiedad '%s' no existe para el objeto '%s' del archivo '%s'.",
$propiedad, $objeto, $archivo
);

Este tipo de funciones se han podido crear con PHP desde hace ms de diez aos
gracias a las variables especiales $argv y $argc y con las funciones func_get_args(),
func_get_arg() y func_num_args().

La novedad es que a partir de PHP 5.6, resultar mucho ms fcil crear este tipo de
funciones y el cdigo resultante ser mucho ms legible. Imagina que tu aplicacin
requiere de una funcin llamada media() que calcula la media de todos los nmeros
que se le pasan como argumento:

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
media(1, 2); // resultado: 1.5
media(1, 2, 7, 15); // resultado: 6.25
media(1, 1, 2, 3, 5, 8, 13); // resultado: 4.71

Hasta la versin PHP 5.5, el cdigo de esta funcin sera algo similar a lo siguiente:

function media()
{
$numeros = func_get_args();

return array_sum($numeros) / func_num_args();


}

A partir de PHP 5.6, cuando una funcin admite un nmero indeterminado de


argumentos, se puede indicar explcitamente aadiendo tres puntos ( ... ) por delante
del nombre de una variable:

function media(...$numeros)
{
return array_sum($numeros) / count($numeros);
}

El argumento varidico indicado con los tres puntos ( ... ) se transforma en un array que
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
contiene todos los argumentos pasados:

Llamada a la funcin Contenido de la variable $numeros

media(1) array(1)

media(1, 2) array(1, 2)

media(1, 2, 3) array(1, 2, 3)

Las funciones de PHP pueden mezclar los argumentos normales con el argumento
varidico, como en el siguiente caso en el que la funcin media() establece un valor
mximo mediante su primer argumento:

function media($valorMaximo, ...$numeros)


{
$media = array_sum($numeros) / count($numeros);

return min($media, $valorMaximo);


}

En este caso, si se pasan menos de dos argumentos a la funcin media() , el argumento


open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
varidico ser un array vaco:

Llamada a la funcin Contenido de la variable $numeros

media(1) array()

media(1, 2) array(2)

media(1, 2, 3) array(2, 3)

Las principales restricciones de esta nueva sintaxis es que cada funcin solamente
puede contener un argumento varidico, siempre debe ser el ltimo argumento de la
funcin y no puede definir un valor por defecto. As que todas estas definiciones de
funciones son incorrectas:

// ERROR: el argumento varidico debe ser el ltimo


miFuncion(...$argumentos, $argumento1);

// ERROR: la funcin tiene dos argumentos varidicos


miFuncion(...$argumentos1, ...$argumentos2);

// ERROR: el argumento varidico no puede tener un valor por defecto


open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
miFuncion($argumento1, ...$argumentos = array());

Los nuevos argumentos varidicos tambin soportan el type-hinting de PHP, que consiste
en indicar por delante del argumento su tipo (as, si alguno de los argumentos de la
funcin no es de ese tipo, PHP muestra un error):

miFuncion(array ...$argumentos);
miFuncion(\Symfony\Component\HttpFoundation\Request ...$peticiones);

La segunda funcin del ejemplo anterior obliga a que todos sus argumentos sean una
instancia de la clase Request de Symfony. Si alguno de los argumentos no es de ese
tipo, PHP genera un error. La ventaja de la nueva sintaxis es que esta comprobacin es
automtica, as que no tienes que hacer un bucle que recorra todos los argumentos de
la funcin.

Recursos tiles
La nueva sintaxis para las funciones varidicas ha sido propuesta y desarrollada por el
jovencsimo programador Nikita Popov. A continuacin se enlazan algunos recursos
tiles para conocer en detalle cmo se incorpor la nueva sintaxis en PHP 5.6:

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Propuesta formal: PHP RFC: Syntax for variadic functions

Pull request con los cambios necesarios en el cdigo fuente de PHP.

Discusin sobre la nueva sintaxis en la lista de correo para programadores de PHP.

Comentarios
0 Comentarios LibrosWeb
1 Acceder

Ordenar por los mejores


Recomendar Compartir

S el primero en comentar...

S el primero en comentar.

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Los generadores de PHP 5.5 Cmo mejorar el rendimiento de las animaciones
1 comentario hace un ao con CSS
Higinio Fuentes Gracias!Lastima que empiezen con 1 comentario hace un ao
PHP 5.5 :( Yoshua Lino Troncoso Como puedo hacer que
animaciones de css3 me consuman menos recursos,
que en dispositivos moviles no me

Preparando tus bocetos sin el Lorem Ipsum El proceso de rediseo de LibrosWeb.es


1 comentario hace un ao 2 comentarios hace un ao
Higinio Fuentes Gracias!Que bien que lo haya Ud. Evert Cruz Reyes Hola que tal, muy buena tu
puesto a disposicion. Es una idea muy practica ya que y gracias por compartir esta informacin, no tengo
es verdad, el cliente se distrae con el mucha experiencia y esto me ha sido

Suscrbete d Aade Disqus a tu sitio web Privacidad

Fecha de publicacin
10 de octubre de 2013

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
ETIQUETAS POPULARES

composer css diseo html javascript php programacin sistemas symfony

SUSCRBETE GRATIS

RSS Todos los tutoriales

RSS Tutoriales de diseo

RSS Tutoriales de programacin

3.756
2006-2017 LibrosWeb.es Contacto Novedades Condiciones Privacidad

das online

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com

Anda mungkin juga menyukai