La información puede ser pasada a las funciones mediante la lista de argumentos, la cual es una lista de expresiones delimitadas por comas. Los argumentos son evaluados de izquierda a derecha.
PHP soporta argumentos pasados por valor (por defecto), pasados por referencia, y valores de argumentos predeterminados. Las Listas de argumentos de longitud variable también están soportadas, vea también las referencias de funciones para func_num_args(), func_get_arg(), y func_get_args() para más información.
Ejemplo #1 Pasar arrays a funciones
<?php
function tomar_array($entrada)
{
echo "$entrada[0] + $entrada[1] = ".$entrada[0]+$entrada[1];
}
?>
Por defecto, los argumentos de las funciones son pasados por valor (por lo que si el valor del argumento dentro de la función se cambia, no se cambia fuera de la función). Para permitir a una función modificar sus argumentos, éstos deben pasarse por referencia.
Para hacer que un argumento a una función sea siempre pasado por referencia hay que poner delante del nombre del argumento el signo 'ampersand' (&) en la definición de la función:
Ejemplo #2 Pasar parámetros de una función por referencia
<?php
function añadir_algo(&$cadena)
{
$cadena .= 'y algo más.';
}
$cad = 'Esto es una cadena, ';
añadir_algo($cad);
echo $cad; // imprime 'Esto es una cadena, y algo más.'
?>
Una función puede definir valores predeterminados al estilo C++ para argumentos escalares como sigue:
Ejemplo #3 Uso de parámetros predeterminados en funciones
<?php
function hacercafé($tipo = "capuchino")
{
return "Hacer una taza de $tipo.\n";
}
echo hacercafé();
echo hacercafé(null);
echo hacercafé("espresso");
?>
El resultado del ejemplo sería:
Hacer una taza de capuchino. Hacer una taza de . Hacer una taza de espresso.
PHP también permite el uso de arrays y del tipo especial NULL
como valores predeterminados, por ejemplo:
Ejemplo #4 Usar tipos no escalares como valores predeterminados
<?php
function hacercafé($tipos = array("capuchino"), $fabricanteCafé = NULL)
{
$aparato = is_null($fabricanteCafé) ? "las manos" : $fabricanteCafé;
return "Hacer una taza de ".join(", ", $tipos)." con $aparato.\n";
}
echo hacercafé();
echo hacercafé(array("capuchino", "lavazza"), "una tetera");
?>
El valor predeterminado debe ser una expresión constante, no (por ejemplo) una variable, un miembro de una clase o una llamada a una función.
Observe que cuando se usan argumentos predeterminados, cualquiera de ellos debería estar a la derecha de los argumentos no predeterminados; si no, las cosas no funcionarán como se esperaba. Considere el siguiente trozo de código:
Ejemplo #5 Uso incorrecto de argumentos predeterminados en una función
<?php
function haceryogur($tipo = "acidófilo", $sabor)
{
return "Hacer un tazón de yogur $tipo de $sabor.\n";
}
echo haceryogur("frambuesa"); // no funcionará como se esperaba
?>
El resultado del ejemplo sería:
Warning: Missing argument 2 in call to haceryogur() in /usr/local/etc/httpd/htdocs/phptest/functest.html on line 41 Hacer un tazón de yogur frambuesa de .
Ahora compare el ejemplo de arriba con este:
Ejemplo #6 Uso correcto de argumentos predeterminados en una función
<?php
function haceryogur($sabor, $tipo = "acidófilo")
{
return "Hacer un tazón de yogur $tipo de $sabor.\n";
}
echo haceryogur("frambuesa"); // funciona como se esperaba
?>
El resultado del ejemplo sería:
Hacer un tazón de yogur acidófilo de frambuensa.
Nota: A partir de PHP 5, los argumentos que son pasados por referencia pueden tener un valor predeterminado.
PHP tiene soporte para listas de argumentos de longitud variable en funciones definidas por el usuario. Esto realmente es bastante fácil si se usan las funciones func_num_args(), func_get_arg(), y func_get_args().
No se necesita una sintaxis especial, y la lista de argumentos aún puede ser proporcionada explícitamente con definiciones de funciones, y se comportará con normalidad.