gratiszona

Funciones

Una funcion se define con la siguiente sintaxis:
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "funcion de ejemplo.\n";
return $retval;
}

Cualquier instruccion valida de PHP puede aparecer en el cuerpo de la funcion, incluso otras funiones y definiciones de
clases.
En PHP3, las funciones deben definirse antes de que se referencien. En PHP4 no existe tal requerimiento.
PHP no soporta la sobrecarga de funciones y tampoco es posible redefinir u ocultar funciones previamente declaradas.
PHP3 no soporta un numero variable de parametros, aunque si soporta parametros por defecto (ver Valores por defecto de
de los parametros para mas informacion). PHP4 soporta ambos: ver Listas de longitud variable de parametros y las
referencias de las funciones func_num_args(), func_get_arg() y func_get_args() para mas informacion.
Parametros de las funciones
La informacion puede suministrarse a las funciones mediante la lista de parametros, una lista de variables y/o constantes
separadas por comas.
PHP soporta pasar parametros por valor (el comportamiento por defecto), por referencia y parametros por defecto. Listas
de longitud variable de parametros solo estan soportadas en PHP4 y posteriores; ver Listas de longitud variable de
parametros y la referencia de las funciones func_num_args(), func_get_arg(), y func_get_args() para mas informacion.
Un efecto similar puede conseguirse en PHP3 pasando un array de parametros a la funcion:
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}

Pasar parametros por referencia

Por defecto, los parametros de una funcion se pasan por valor (de manera que si cambias el valor del argumento dentro de
la funcion, no se ve modificado fuera de ella). Si deseas permitir a una funcion modificar sus parametros, debes pasarlos
por referencia.
Si quieres que un parametro de una funcion siempre se pase por referencia, puedes anteponer un ampersand (&) al nombre
del parametro en la definicion de la funcion:
function add_some_extra(&$string) {
$string .= ’ y algo mas.’;
}
$str = ’Esto es una cadena, ’;
add_some_extra($str);
echo $str; // Saca ’Esto es una cadena y algo mas.’

Si deseas pasar una variable por referencia a una funcion que no toma el parametro por referencia por defecto, puedes
anteponer un ampersand al nombre del parametro en la llamada a la funcion:
function foo ($bar) {
$bar .= ’ y algo mas.’;
}
$str = ’Esto es una cadena, ’;
foo ($str);
echo $str; // Saca ’Esto es una cadena, ’
foo (&$str);
echo $str; // Saca ’Esto es una cadena y algo mas.’
Parametros por defecto
Una funcion puede definir valores por defecto para los parametros escalares estilo C++:
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 expresion constante y no una variable o miembro de una clase.
En PHP 4.0 tambien es posible especificar unset como parametro por defecto. Esto significa que el argumento no tomara
ningun valor en absoluto si el valor no es suministrado.
Destacar que cuando se usan parametros por defecto, estos tienen que estar a la derecha de cualquier parametro sin valor
por defecto; de otra manera las cosas no funcionaran de la forma esperada. Considera el siguiente fragmento de codigo:
function makeyogurt ($type = "acidophilus", $flavour) {
return "Haciendo un bol de $type $flavour.\n";
}
echo makeyogurt ("mora"); // No funcionara 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, comparalo con:
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.

Lista de longitud variable de parametros

PHP4 soporta las listas de longitud variable de parametros en las funciones definidas por el usuario. Es realmente facil
usando las funciones func_num_args(), func_get_arg() y func_get_args().
No necesita de ninguna sintaxis especial y las listas de parametros pueden ser escritas en la llamada a la funcion y se
comportaran de la manera esperada.

Devolver valores

Los valores se retornan usando la instruccion opcional return. Puede devolverse cualquier tipo de valor, incluyendo listas y
objetos.
function square ($num) {
return $num * $num;
}
echo square (4); // saca ’16’.

No puedes devolver multiples valores desde una funcion, pero un efecto similar se puede conseguir devolviendo una lista.
function small_numbers() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();

Funciones variable

PHP soporta el concepto de funciones variable, esto significa que si una variable tiene unos parentesis añadidos al final
PHP buscara una funcion con el mismo nombre que la evaluacion de la variable, e intentara ejecutarla. Entre otras cosas
esto te permite implementar retrollamadas (callbacks), tablas de funciones y demas.
Ejemplo de funcion variable
<?php
function foo() {
echo "Dentro de foo()<br>\n";
}
function bar($arg = ” ) {
echo "Dentro de bar(); el parametro fue ’$arg’.<br>\n";
}
$func = ’foo’;
$func();
$func = ’bar’;
$func(’test’ );
?>

Anterior: require once en php
Siguiente: class