Artículo por Fernando Gaitán

Funciones en PHP

Desde el Usuario - Programador

En PHP existen algo llamado funciones, éstas son instrucciones que podemos darle a nuestro código, como si fueran comportamientos almacenados que al ser invocados hacen algo. Existen funciones declaradas por el usuario y funciones propias de PHP, ahora veremos las primeras.

Creando una función básica

En primer lugar en PHP una función se crea mediante la palabra reservada function + el nombre de la misma + apertura y cierre de paréntesis y finalmente dentro de llaves las líneas de código que se ejecutarán al llamar a la función:

Estructura básica de una función
<?php
function nombreDeLaFuncion(){
    // Lo que hace la función.
}
?>

Por ejemplo podríamos crear una función:

Función simple
<?php
function saludar(){
    echo 'Hola!!!';
}
?>

Esto no hará nada más que crear en memoria la función que puede ser invocada más adelante. Para invocarla debemos llamarla por su nombre + los paréntesis:

Llamando a una función
<?php
function saludar(){
    echo 'Hola!!!';
}
saludar();
?>

Resultado:

Hola!!!

Parámetros en funciones

Los parámetros, también llamados argumentos, son datos que podemos pasar a nuestra función para realizar una operación. Por ejemplo podríamos tener una función saludar() como la anterior a la que habrá que pasar como parámetro un nombre, y saludará a ese nombre:

Función con parámetro
<?php
function saludar($nombre){
    echo "Hola $nombre";
}
saludar('Fernando');
?>

Resultado:

Hola Fernando

Notar que los parámetros, cuando se crea una función, se escriben con el mismo formato que una variable con el signo $ delante. Y además podemos agregar más de un parámetro:

Función con múltiples parámetros
<?php
function sumar($num1, $num2){
    $resultado = $num1 + $num2;
    echo "El resultado de la suma es $resultado";
}
sumar(20, 7);
?>

Resultado:

El resultado de la suma es 27

Paso de parámetros por valor vs por referencia

Existen dos formas de pasar parámetros, por valor o por referencia. Hasta ahora lo hemos hecho por valor, esto significa que las funciones no podrán alterar el código externo. Por ejemplo si tuviéramos algo cómo esto:

Paso por valor
<?php
function multiplicarPor2($num){
    $num *= 2;
}
$numero = 10;
multiplicarPor2($numero);
echo $numero;
?>

Resultado:

10

A simple vista esta función recibe un número como parámetro y lo multiplica por 2. Podríamos deducir que el valor que devuelve por pantalla el script es 20, porque la función multiplica por 2 y 10 * 2 es igual a 20. Sin embargo el resultado de $numero sigue siendo 10.

Esto se debe a que las funciones que reciben datos como parámetros por valor no pueden modificar estos datos, ya que están por fuera de la función.

Sin embargo podríamos realizar esto mediante el pase de parámetros por referencia:

Paso por referencia
<?php
function multiplicarPor2(&$num){
    $num *= 2;
}
$numero = 10;
multiplicarPor2($numero);
echo $numero;
?>

Resultado:

20

Nota: Para indicarle a nuestra función que un parámetro se pasa por referencia debemos usar el signo & delante del parámetro.

Variables de entorno en funciones

Las variables que se declaran dentro de una función, nacen y mueren dentro de la misma, por tanto, si hiciéramos algo cómo esto:

Alcance de variables
<?php
function setearVariable(){
    $nombre = 'Fernando';
}
setearVariable();
echo $nombre;
?>

Resultado: Notice: Undefined variable: nombre

¿Y esto por qué? Porque cómo dijimos antes las variables que se declaran en una función, sólo existen dentro de la misma, si intentamos llamarla desde afuera el programa nos devolverá un error de tipo Notice porque para el programa esa variable no existe más que en la función. Por tanto, esto es muy importante de tener en cuenta de cómo trabaja una función, es como una especie de sub programa.

Los que sí podríamos hacer es crear dentro de la función una variable global, lo cual hará que está este disponible en el resto de la aplicación.

Variables globales
<?php
function setearVariable(){
    global $nombre;
    $nombre = 'Fernando';
}
setearVariable();
echo $nombre;
?>

Resultado:

Fernando

Nota: En este caso la función $nombre sí funcionará en el resto del script a pesar de que se ha creado dentro de una función, aunque debe ser probada en el mismo servidor, ya que no todos aceptan la función GLOBAL.

Variables estáticas

Como dijimos antes una variable declarada dentro de una función tiene utilidad dentro de la misma y al invocarse la función volverán a crearse todas las variables que estén dentro. Sin embargo a través de las variables estáticas PHP puede darnos la posibilidad de crear una función reutilizable en cada llamada:

Variables estáticas
<?php
function aumentarNumero(){
    static $numero;
    $numero++;
    echo $numero . '<br />';
}
aumentarNumero();
aumentarNumero();
aumentarNumero();
?>

Resultado:

1
2
3

Retorno de valores en funciones

Dijimos que una función nos da la posibilidad de pasar datos de entradas, parámetros, pero las funciones también son capaces de devolvernos valores mediante la palabra reservada return. Por ejemplo podríamos crear una función llamada sumar() como la que creamos antes y devolver el resultado de la misma:

Retorno de valores
<?php
function sumar($num1, $num2){
    $resultado = $num1 + $num2;
    return $resultado;
}
$resultado_de_suma = sumar(20, 7);
echo $resultado_de_suma;
?>

Resultado:

27

Tip: Una cosa que hay que tener en cuenta es que después de return el código que siga no será tenido en cuenta por el intérprete.

Además una función no puede devolver más de un valor, pero si en cambio puede devolver cualquier tipo de valor, por ejemplo un array:

Devolver un array
<?php
function sumar_restar($num1, $num2){
    $resultado = array(
        'suma' => $num1 + $num2,
        'resta' => $num1 - $num2
    );
    return $resultado;
}
$resultado_de_suma_resta = sumar_restar(20, 7);
echo 'La suma es: ' . $resultado_de_suma_resta['suma'] . '<br />';
echo 'La resta es: ' . $resultado_de_suma_resta['resta'] . '<br />';
?>

Resultado:

La suma es: 27
La resta es: 13

Funciones dentro de funciones

Dentro de una función podemos invocar otra sin ningún problema para así ahorrar líneas de código innecesaria. Por ejemplo podríamos tener dos funciones:

Funciones auxiliares
<?php
function dividir($num1, $num2){
    $resultado = $num1 / $num2;
    return $resultado;
}
function verificarMultiplo2($num){
    if($num % 2 == 0){
        return true;
    }else{
        return false;
    }
}
?>

La primer función divide dos números y retorna el resultado mientras que la segunda recibe un número y devuelve true si es múltiplo de 2 y false si no lo es:

Combinando funciones
<?php
function dividir($num1, $num2){
    $resultado = $num1 / $num2;
    return $resultado;
}
function verificarMultiplo2($num){
    if($num % 2 == 0){
        return true;
    }else{
        return false;
    }
}
function dividir_y_verificar_multiplo_2($num1, $num2){
    $resultado = dividir($num1, $num2);
    $multiplo = verificarMultiplo2($resultado);
    return $multiplo;
}
?>

La función dividir_y_verificar_multiplo_2() recibirá dos números y devolverá si el resultado de la división de ambos es múltiplo de 2, usando en su interior las otras dos funciones: dividir() y verificarMultiplo2().

Gracias Fernando Gaitán

Por este excelente tutorial sobre funciones en PHP

Visita: http://fernando-gaitan.com.ar