[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:
<?php //En $textoSinEspacios se guarda el resultado de la función trim() $textoSinEspacios = trim(“ Mi cadena de texto “); ?>
No solo podemos asignar el valor devuelto a una variable, sino que podemos trabajar con el en vivo, por ejemplo imprimirlo en pantalla:
<?php echo trim(“ Mi cadena de texto “); ?>
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:
<?php
function miFuncion() {
//Aquí dentro el contenido de tu función.
echo “Soy una función”;
}
//Invocamos la función
miFuncion();
?>
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:
<?php
function miFuncion($texto) {
echo $texto . '<br />';
}
//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 . '<br />';
}
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:
<?php
function miFuncion( $texto = 'Soy un texto por defecto' ) {
echo $texto . '<br />';
}
//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:
<?php
function miFuncion() {
$variable = 'Hola mundo';
echo 'Dentro de la función: ' . $variable;
}
miFuncion(); //Imprime “Dentro de la función: Hola mundo”.
//Al tratar de imprimir la variable desde fuera de la función no la reconocerá.
echo 'Fuera de la función: '. $variable;
?>
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:
<?php
function miFuncion() {
//Indicamos que $variable es una global
global $variable;
echo 'Dentro de la función: ' . $variable;
}
//Declaramos $variable
$variable = 'Hola mundo';
miFuncion(); //Imprime “Dentro de la función: Hola mundo”.
echo 'Fuera de la función: '. $variable; //Imprime “Fuera de la función: Hola mundo”.
?>
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:
<?
//Esta función estaría mal planteada
function sumar($num, $numero){
echo $num + $numero;
}
function multiplicar($num, $numero){
return $num * $numero;
}
sumar(10, 4); //Imprimiría 14
$n = multiplicar(10, 4); //Esto asignaría a $n el valor 40
echo $n; //Usamos $n para lo que queramos.
?>
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.












Trackbacks & Pingbacks
[...] nombres, o porque nuestra aplicación tiene un tamaño considerable podremos necesitar tener dos funciones, clases, constantes, etcétera con un mismo nombre, para eso existen los [...]
Información Bitacoras.com…
Valora en Bitacoras.com: 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……
Leave a Reply
Want to join the discussion?Feel free to contribute!