Capítulo 9 Funciones
62
9 Funciones 9.1 ¿Qué es una función? Una función es un conjunto de código agrupado con la intención de ejecutarse varias veces, o con distintos parámetros o variables. PHP además de tener un gran número de funciones preconstruidas, permite a uno crear sus propias funciones. Con las funciones se tienen la ventaja de que se escribe el código sólo una vez, en lugar de reescribirlo cuando se vuelve a necesitar. Esto no solo le da velocidad al proceso de desarrollo, sino que también hace el código más fácil de leer y mantener. Si hay un problema con el código de una función, se actualiza en un sólo lugar en vez de realizarlo en muchos lugares. Las funciones que se usan en más de una página es mejor guardarlas en archivos externos e incluir éstos en varias páginas. Para ejecutar el código de una función simplemente se pone su nombre y entre paréntesis los parámetros que necesita. Si en una función se quiere devolver un valor, el modo de hacerlo es mediante la función return(parámetro), donde parámetro puede ser simplemente un "1" para indicar que todo fue correctamente, un "0" para indicar un error o una variable donde se devuelve el valor de lo procesado por la función. Si se llama desde una función, return() termina inmediatamente la ejecución de la función y retorna su argumento como valor de la función. 9.2 Funciones definidas por el programador Para definir una función se usa la palabra function y a continuación el nombre de la función y los paréntesis izquierdo y derecho. Todo el código que contiene la función debe estar encerrado entre llaves { }. function funcion_nombre ( ) { sentencia(s); } Para el nombre de la función se siguen las mismas reglas que para dar nombre a una variable, sin el signo de pesos al inicio. Cualquier código válido puede ir dentro del área de sentencias
Programación
Arturo Ruvalcaba
Capítulo 9 Funciones
63
de la función, incluso llamadas a otra función. No hay límite en el número de sentencias que puede contener la función, pero por lo general una función no contiene un gran número de sentencias.
9.3 Parámetros de las funciones Los parámetros son los datos que reciben las funciones y que utilizan para realizar las operaciones de la función. Una función puede recibir cualquier número de parámetros, incluso ninguno. A la hora de definir la función, en la cabecera, se definen los parámetros que va a recibir. function funcion1 ($parametro1, $parámetro2) Así se definió una función llamada funcion1 que recibe dos parámetros. Como se puede observar, no se tiene que definir el tipo de datos de cada parámetro. Los parámetros tienen validez durante la ejecución de la función, es decir, tienen un ámbito local a la función donde se están recibiendo. Cuando la función se termina, los parámetros dejan de existir. PHP soporta el paso de parámetros por valor (el comportamiento por defecto), por referencia, y parámetros por defecto. Importante: Debe haber concordancia en número y orden entre la lista de parámetros de la definición de la función y la lista de parámetros de la llamada a la función.
Paso de parámetros por valor El paso de parámetros en PHP se pueden realiza por valor. "Por valor" es una manera típica de pasar parámetros en funciones, quiere decir que el cambio de un dato de un parámetro no actualiza el dato de la variable que se pasó a la función. Por ejemplo, cuando se invoca una función pasando una variable como parámetro, a pesar de que cambiemos el valor del parámetro dentro de la función, la variable original no se ve afectada por ese cambio. Puede que se vea mejor con un ejemplo: function por_valor ($parametro1){ $parametro1="hola"; echo "<br>" . $parametro1; // imprime "hola" } $variable = "esto no cambia"; por_valor ($variable); echo "<br>" . $variable; // imprime "esto no cambia"
Paso de parámetros por referencia En contraposición al paso de parámetros por valor, está el paso de parámetros por referencia. En este caso, el cambio del valor de un parámetro dentro de una función sí afecta al valor de la variable original.
Programación
Arturo Ruvalcaba
Capítulo 9 Funciones
64
Los parámetros se pasan por referencia si, en la declaración de la función, se coloca un "&" antes del parámetro. <?php function por_referencia(&$cadena) { $cadena = 'Si cambia'; } $str = 'Esto es una cadena'; por_referencia ($str); echo $str; // Imprime 'Si cambia' ?> Este script mostrará por pantalla 'Si cambia'. Para conseguir que un parámetro de una función siempre se pase por referencia, hay que anteponer un ampersand (&) al nombre del parámetro en la definición de la función:
Paso de parámetros por defecto Se puede definir valores por defecto para los parámetros. Los valores por defecto sirven para que los parámetros contengan un dato predefinido, con el que se inicializarán si no se le pasa algún valor en la llamada de la función. Los valores por defecto se definen asignando un dato al parámetro al declararlo en la función. function programas ($lenguaje = "php", $cantidad = 3){ echo “Se hicieron $cantidad programas en $lenguaje”; } Para la definición de función anterior, $lenguaje tiene como valor por defecto "php", mientras que $cantidad tiene 3 como valor por defecto. Si se llama a la función sin indicar valores a los parámetros, estos tomarán los valores asignados por defecto: programas (); // Se hicieron 3 programas en php Si se llama a la función indicando un valor, este será tenido en cuenta para el primer parámetro. programas ("java"); // Se hicieron 3 programas en java Nota: El valor por defecto tiene que ser una expresión constante, y no una variable. En PHP 4.0 también es posible especificar unset como parámetro por defecto. Esto significa que el argumento no tomará ningún valor en absoluto si el valor no es suministrado. Importante: 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.
Programación
Arturo Ruvalcaba
Capítulo 9 Funciones
65
9.4 Valores devueltos A diferencia de C, PHP puede devolver cualquier número de valores, sólo hará falta recibir estos argumentos de la forma adecuada, que es usando un arreglo. Ejemplo: function numeros() { return array(0,1,2); } El código para llamar a la función es: list ($cero, $uno, $dos) = numeros(); 9.5 Funciones variable PHP soporta el concepto de funciones variable, esto significa que si una variable tiene unos paréntesis añadidos al final, PHP buscará una función con el mismo nombre que la evaluación de la variable, e intentará ejecutarla. <?php function foo() { echo "En foo()<br>\n"; } function bar ($arg ='') { echo " bar(); El argumento ha sido '$arg'.<br>\n"; } $func = 'foo'; $func(); // imprime “En foo()” $func = 'bar'; $func('test'); // imprime “bar(); El agrumento ha sido ‘test’ ?> Otro ejemplo: <?php function imprime($texto) { echo $texto . "\n"; } function imprimeNegrilla($texto){ echo "<b>$texto</b>\n"; } $MiFunc = "imprime"; $MiFunc("Hola"); //imprimirá Hola $MiFunc = "imprimeNegrilla"; $MiFunc("Hola"); //imprimirá Hola ?>
Programación
Arturo Ruvalcaba
Capítulo 9 Funciones
66
9.6 Variables estáticas y globales Distinción entre variables estáticas (static) y globales (global). Las variables estáticas se definen dentro de una función, la primera vez que es llamada dicha función la variable se inicializa, guardando su valor para posteriores llamadas. <?php function contador () { static $count = 0; $count = $count + 1; return $count; } echo contador()."<BR>"; // imprimirá 1 echo contador()."<BR>"; // imprimirá 2 echo contador()."<BR>"; // imprimirá 3 ?> Variables globales. Una variable que ha sido declarada fuera de una función solo puede ser referenciada dentro de la función pasándola a ésta como un argumento o usando la sentencia global. Con la sentencia global se convierte una variable local con alcance local en una variable global con alcance global. Cualquier cambio hecho a la variable dentro de la función, se le queda a la variable al salir de la función sin usar un comando return. <?php var $a = 1; function ver_a() { global $a; echo $a."<BR>"; // imprimirá el valor de $a $a += 1; // sumamos 1 a $a } echo ver_a(); // imprimirá 1 echo ver_a(); // imprimirá 2
$a = 7; echo ver_a(); // imprimirá 7 echo ver_a(); // imprimirá 8 ?> 9.7 Funciones recursivas PHP también permite la recursión, es decir, una función se puede llamar así misma, pero hay que tener cuidado de que no se entre en un loop infinito, para lo cual la función debe tener una salida (algo que cause que la función deje de llamarse a sí misma). A continuación se presenta un ejemplo:
Programación
Arturo Ruvalcaba
Capítulo 9 Funciones
67
function print_to_ten( ) { static $n = 1; print $n; $n++; while ($n <= 10) { print_to_ten ( ); } }
function_exists( ) La función function_exists( ) regresa el valor TRUE o FALSE en base a si una función existe o no en PHP. Esto se aplica a funciones propias de PHP y a funciones definidas por el usuario. if (function_exists (‘mi_funcion’)) { sentencias } El nombre de la función a ser probada debe estar entre comillas simples y sin los paréntesis finales.
Programación
Arturo Ruvalcaba