[Tutorial PHP] Trabajar con Funciones

Al programar nos encontramos con multitud de ocasiones en las que hemos de repetir código para poder realizar acciones especificas, como por ejemplo limpiar una cadena de texto, pero tener que copiar y pegar el mismo código cada ves que debamos limpiar una cadena de texto es simplemente una chapuza, además de poco eficiente de cara al futuro, ya que si queremos modificar su funcionamiento deberemos de hacerlo una a una en todas las partes que copiamos el código. Las funciones entre sus muchas ventajas* permiten resolver este problema* de manera elegante.

Las funciones se pueden considerar bloques de código separados del flujo original del programa que nos permite resolver problemas específicos, además, para poder interactuar correctamente se le pueden pasar parámetros para que trabajen con ellos, y estas a su ves pueden devolver valores.

Por ejemplo podemos usar la función trim() ya definida en PHP para quitar los espacios al principio y final de una cadena de texto, para hacerlo le pasamos como parámetro la cadena de texto y ella nos devuelve la cadena limpia:

No solo podemos asignar el valor devuelto a una variable, sino que podemos trabajar con el en vivo, por ejemplo imprimirlo en pantalla:

Por supuesto puedes definir tus propias funciones y es muy sencillo, se hace mediante la palabra reservada function y el nombre de la función añadiéndole paréntesis y abriendo llaves, suena complicado pero nada mas lejos de la realidad, veamos un ejemplo:

Como puedes ver la función se limita a imprimir en pantalla un texto que hemos definido dentro de esta, pero para hacerlo mas interesante vamos a hacer que imprima un texto que le pasamos a la función como parámetro:

'; } //Invocamos la función miFuncion(“Soy un texto pasado como parámetro”); //Otra función a la que le pasamos mas parámetros function otraFuncion($texto, $nombre) { echo $nombre . “: “ . $texto . '
'; } otraFuncion(“¿Hola como estas?”, “Juan”); //Imprime “Juan: ¿Hola como estas?” //Ahora le pasamos como parámetros variables definidas fuera de la función $unTexto = “Yo muy bien, ¿Y tu?”; $unNombre = “Pedro”; otraFunction( $unTexto , $unNombre ); //Imprime “Pedro: Yo muy bien ¿Y tu?” ?>

Los parámetros cuando hay mas de uno* han de pasarse en el mismo orden que fueron definidos*, esto es muy importante puesto que a cada parámetro que le pasas le corresponde la variable definida en ese lugar en la función.

PHP nos permite hacer algo muy interesante al declarar los parámetros que usara la función, y es declarar si el parámetro que has de pasar es opcional, ¿Como se hace esto? Muy fácil dándole al parámetro un valor por defecto. Ejemplo:

'; } //Invocamos la función sin pasarle parámetro miFuncion(); //Imprime “Soy un texto por defecto”. //Invocamos la función pasándole un texto miFuncion('He sido pasado como parámetro'); //Imprime “He sido pasado como parámetro”. ?>

Para definir el parámetro como opcional le hemos dado un valor por defecto con el operador “=”, exactamente igual que si asignáramos un valor a una variable durante el flujo normal del script. ¿Fácil cierto?.

Para entender porque las funciones permiten pasar parámetros habría que hablar del ámbito de las variables. Hasta ahora has declarado variables y las has usado desde cualquier sitio de los scripts sin ningún impedimento, pero con las funciones esto cambia.

Toda variable declarada durante el flujo natural del script es considerada como una variable Global, mientras que las declaras dentro del bloque de la función se llaman Locales, esto quiere indicar que las variables locales solo se pueden usar dentro de la función que las declaró, veamos un ejemplo:

Este ejemplo muestra fácilmente como funcionan las variables locales, en caso de que queramos usar una variable declarada fuera de la función debemos de pasarla como parámetro, o indicarle a la función que esa variable es una global:

Esta forma de trabajar, usando globales dentro de las funciones no la recomiendo para nada, hace el código mas confuso y permite que se acceda y se alteren datos del script de una forma poco organizada. Las funciones hay que verlas como habitaciones de dos puertas, una para entrar (parámetros) y otra para salir (return), usar globales es como colarnos por la ventana, poco seguro.

Al igual que no es una buena practica usar globales, tampoco lo es imprimir datos directamente desde una función, (digo imprimir por citar un ejemplo, por supuesto hay excepciones).

Lo normal es que si le pasamos datos mediante los parámetros, tengamos una forma para devolver un resultado, para eso existe la sentencia return:

Al usar return $num * $numero; permitimos que el resultado se almacene en una variable para luego manipularla, también podríamos imprimirla directamente en pantalla mediante echo multiplicar(10, 4); o cualquier otra acción.

Es importante entender la importancia de encapsular el código, controlando lo que entra y sale de las funciones, porque mas adelante cuando hablemos de Programación Orientada a Objetos sera fundamental evitar que nada entre y salga de las clases sin control.

Quería tratar todo lo relacionado con las funciones en este articulo, pero es demasiado extenso, por lo tanto en el siguiente hablaré sobre Funciones Recursivas y Closures.