Funciones definidas por el usuario
Una función se puede definir y utilizar con la siguiente sintaxis:
<?php function sample($arg_1, $arg_2, ..., $arg_n) { echo "funcion de ejemplo"; return $variable_devuelta; } echo sample($arg_1, $arg_2, ..., $arg_n) ?> |
Cualquier instrucción válida de PHP puede aparecer en el cuerpo de la función, incluso otras funciones y definiciones de clases. La variable devuelta puede ser un valor o una matriz.
Parámetros de las funciones
A las funciones se les suministra información mediante los parámetros, una lista de variables y/o constantes separadas por comas. PHP soporta pasar parámetros por valor (comportamiento por defecto), por referencia y por defecto.
- Pasar parámetros por valor
Por defecto, los parámetros de una función se pasan por valor. De esta manera, los cambios de valor del argumento dentro de la función no modifica el parámetro fuera de ella. En el siguiente ejemplo, se ejecuta la función pero eso no afecta al valor del argumento: $array no varía.
<?php $array[0] = 9; $array[1] = 25; function sqrt_array($input) { $input[0] = sqrt($input[0]); $input[1] = sqrt($input[1]); echo '$input[0]= '.$input[0]." - ".'$input[1]= '.$input[1]."<br />"; } sqrt_array($array); // mostrara "$input[0]= 3 - $input[1]= 5" echo '$array[0]= '.$array[0]." - ".'$array[1]= '.$array[1]; // mostrara "$array[0]= 9 - $array[1]= 25" ?>
- Pasar parámetros por referencia
Para permitir a una función modificar los parámetros deben pasarse por referencia. Para ello se antepone un ampersand (&) al nombre del parámetro en la definición de la función. En el siguiente ejemplo, que sólo se diferencia del anterior en el ampersand, se ejecuta la función y eso afecta al valor del argumento: $array varía.
<?php $array[0] = 9; $array[1] = 25; function sqrt_array(&$input) { $input[0] = sqrt($input[0]); $input[1] = sqrt($input[1]); echo '$input[0]= '.$input[0]." - ".'$input[1]= '.$input[1]."<br>"; } sqrt_array($array); // mostrara "$input[0]= 3 - $input[1]= 5" echo '$array[0]= '.$array[0]." - ".'$array[1]= '.$array[1]; // mostrara "$array[0]= 3 - $array[1]= 5" ?>
- Parámetros por defecto
En las funciones se pueden definir valores por defecto para los parámetros y tienen que ser una constante y no una variable. Los parámetros con valor por defecto tienen que estar los últimos, después de los parámetros sin valor por defecto:
<?php function hacercafe ($tipo = "cappucino") { return "hacer una taza de ".$tipo."<br>"; } echo hacercafe ("espresso"); // mostrara "Hacer una taza de espresso" echo hacercafe (); // mostrara "Hacer una taza de cappucino" ?>
Ámbito de las variables en las funciones
En las funciones definidas por el usuario las variables son locales: las variables que se usan dentro de una función están limitadas al ámbito local de la función. En el siguiente ejemplo, la orden echo utiliza una versión local de la variable $a a la que no se ha asignado ningún valor en ese ámbito:
<?php $a = 1; // variable global, ambito el script function Test() { echo $a; // variable local, ambito la funcion } Test(); // no mostrara nada ?> |
Si una variable va a ser utilizada dentro de una función debe ser declarada global dentro de la función. En el siguiente ejemplo, al declarar $a y $b globales, todas las referencias a dichas variables se refieren a la versión global:
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; // mostrara "3" ?> |
Bibliotecas de funciones
Las bibliotecas de funciones son archivos que contienen funciones que son utilizadas por otros programas y son muy útiles cuando tenemos varias páginas con la misma cabecera, pie de página, cuerpo o conexión a base de datos: utilizando una biblioteca de funciones será mucho más fácil hacer cualquier modificación. Por ejemplo, si tenemos el archivo biblioteca.php que contiene las funciones media(), factorial(), cabecera(), pie() y cuerpo()…
<?php // biblioteca.php function media($a, $b) { $media=($a+$b)/2; return $media; } function factorial($a) { if ($a <= 1) { return 1; } else { return $a*factorial($a-1); } } function cabecera() { echo "<center><h1>Zona usuarios www.domain.com</h1></center><hr>"; } function pie() { echo "<hr><center><b>grupo de usuarios de software libre<br />"; echo "<a href=http://www.somoslibres.org>www.somoslibres.org</a><br />"; echo "gnu/gpl 2004</b></center><br />"; } function cuerpo() { echo "<body text=white bgcolor=#006699 link=yellow vlink=yellow alink=red>"; } ?> |
… y queremos utilizarlas en el archivo calcular.php, utilizaremos en éste el comando include_once()…
<?php // calcular.php include_once("biblioteca.php") ?> <html> <head> </head> <?php cuerpo() ?> <?php cabecera() ?> <center> <?php echo "media de 4 y 6: ".media(4,6)."<br />"; echo "factorial de 3: ".factorial(3)."<br />"; ?> </center> <?php pie() ?> </body> </html> |
… obteniendo:
El comando include_once() incluye y evalúa el archivo especificado, teniendo esto dos consecuencias:
- cualquier función o variable disponible en el fichero incluido estará disponible a partir de ese momento en el fichero que hace la llamada.
- cualquier función o variable disponible en ese punto en el fichero desde donde se hace la llamada estará disponible en el fichero incluido a partir de ese momento.
La función include_once() se comporta como include(), con la única diferencia de que si el fichero ha sido ya incluido no se volverá a incluir. Por ello, include_once() se usa en los casos en los que un fichero puede ser incluido más de una vez durante la ejecución de un script y se quiere estar seguro que se incluye una sola vez para evitar problemas con redefinición de funciones, valores de variables, etc.
Recursos
- Ayuda de PHP: Functions