La información puede suministrarse a las funciones mediante
la lista de parámetros, una lista de variables y/o
constantes separadas por comas.
PHP soporta pasar parámetros por valor (el comportamiento
por defecto), por
referencia, y parámetros por
defecto. Listas de longitud variable de parámetros
sólo están soportadas en PHP4 y posteriores; ver
Listas de longitud
variable de parámetros y la referencia de las
funciones func_num_args(),
func_get_arg(), y
func_get_args() para más
información. Un efecto similar puede conseguirse en PHP3
pasando un array de parámetros a la función:
Ejemplo 12-4. Pasando matrices a funciones
<?php function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; } ?>
|
|
Por defecto, los parámetros de una función se pasan
por valor (de manera que si cambias el valor del argumento dentro
de la función, no se ve modificado fuera de ella). Si
deseas permitir a una función modificar sus
parámetros, debes pasarlos por referencia.
Si quieres que un parámetro de una función siempre
se pase por referencia, puedes anteponer un ampersand (&) al
nombre del parámetro en la definición de la
función:
Ejemplo 12-5. Pasando parámetros de funciones por
referencia
<?php function add_some_extra(&$string) { $string .= ' y algo más.'; } $str = 'Esto es una cadena, '; add_some_extra($str); echo $str; // Saca 'Esto es una cadena, y algo más.' ?>
|
|
Una función puede definir valores por defecto para los
parámetros escalares estilo C++:
Ejemplo 12-6. Uso de parámetros por defecto en funciones
<?php function makecoffee ($type = "cappucino") { return "Hacer una taza de $type.\n"; } echo makecoffee (); echo makecoffee ("espresso"); ?>
|
|
La salida del fragmento anterior es:
Hacer una taza de cappucino.
Hacer una taza de espresso. |
El valor por defecto tiene que ser una expresión constante,
y no una variable, miembro de una clase ó llamada a una
función.
Destacar que cuando se usan parámetros por defecto, estos
tienen que estar a la derecha de cualquier parámetro sin
valor por defecto; de otra manera las cosas no funcionarán
de la forma esperada. Considera el siguiente fragmento de
código:
Ejemplo 12-7. Uso incorrecto de parámetros por defecto en
funciones
<?php function makeyogurt ($type = "acidophilus", $flavour) { return "Haciendo un bol de $type $flavour.\n"; } echo makeyogurt ("mora"); // No funcionará de la manera esperada ?>
|
|
La salida del ejemplo anterior es:
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Haciendo un bol de mora. |
Y ahora, compáralo con:
Ejemplo 12-8. Uso correcto de parámetros por defecto en
funciones
<?php function makeyogurt ($flavour, $type = "acidophilus") { return "Haciendo un bol de $type $flavour.\n"; } echo makeyogurt ("mora"); // funciona como se esperaba ?>
|
|
La salida de este ejemplo es:
Haciendo un bol de acidophilus mora. |
PHP4 soporta las listas de longitud variable de parámetros
en las funciones definidas por el usuario. Es realmente
fácil, usando las funciones
func_num_args(),
func_get_arg(), y
func_get_args().
No necesita de ninguna sintaxis especial, y las listas de
parámetros pueden ser escritas en la llamada a la
función y se comportarán de la manera esperada.