Funciones

Una función es un grupo de instrucciones, independiente del programa principal, que se puede reutilizar a lo largo de un programa. Las funciones nos ahorran tener que repetir el grupo de instrucciones, sustituyéndolos por simples llamadas a las funciones.

En esta lección se tratan primero las funciones sin argumentos y después las funciones con argumentos. Todo lo que se comenta sobre las funciones sin argumentos (forma de definirlas, nombre, etc.) se aplica también a las funciones con argumentos.

Funciones sin argumentos

Las funciones se identifican por su nombre. Las funciones se definen mediante la palabra reservada function seguida del nombre de la función y unos paréntesis, seguidos de un conjunto de instrucciones escritos entre llaves. La llave que abre el bloque de instrucciones se suele escribir al principio de la línea siguiente, no a continuación del nombre de la función.

function nombreDelaFuncion()
{
    bloque_de_sentencias
}

Las funciones se aprovechan en el resto del programa escribiendo el nombre de la función seguido de paréntesis. PHP ejecuta el bloque de instrucciones de la función cada vez que se llama a la función.

<?php
// Definición de la función prueba()
function prueba()
{
    print "<p>I will not waste chalk.</p>\n";
    print "\n";
    print "<p>I will not skateboard in the halls.</p>\n";
    print "\n";
    print "<p>I will not burp in class.</p>\n";
    print "\n";
}

print "<p>Programa de prueba.</p>\n";
print "\n";
// Llamadas a la función prueba()
prueba();
prueba();
?>
<p>Programa de prueba.</p>

<p>I will not waste chalk.</p>

<p>I will not skateboard in the halls.</p>

<p>I will not burp in class.</p>

<p>I will not waste chalk.</p>

<p>I will not skateboard in the halls.</p>

<p>I will not burp in class.</p>

Los nombres de las funciones siguen las mismas reglas de los identificadores de PHP, es decir, deben comenzar por una letra o un guion bajo (_) y el resto de caracteres pueden ser letras, números o guiones bajos (se pueden utilizar caracteres no ingleses como acentos, eñes, etc), pero los nombres de funciones no distinguen entre mayúsculas o minúsculas.

La guía de estilo PEAR para PHP recomienda que los nombres de las funciones sigan el estilo camelCase (es decir, sin espacios ni guiones, con la primera palabra en minúsculas y el resto con la primera letra en mayúsculas).

Independencia de las funciones respecto al programa principal

Las funciones son independientes del resto del programa. En particular, las variables que aparecen en una función son independientes de las variables del programa principal. En principio, ni la función tiene acceso a las variables del programa principal, ni el programa principal tiene acceso a las variables de la función.

Variables globales

Podemos hacer que una función tenga acceso a las variables del programa principal, indicando en el cuerpo de la función los nombres de las variables precedidas de la palabra reservada global.

Funciones con argumentos (valores)

Podemos enviar datos a una función incluyendo argumentos en su llamada. En la definición de la función deben indicarse los argumentos que se van a recibir, escribiéndolos entre los paréntesis como variables, separadas por comas. En el programa principal, los datos que se quieren enviar a la función simplemente se incluyen en la llamada a la función escribiéndolos entre los paréntesis, separados por comas. La función guarda los valores en los argumentos (como variables) en el orden indicado en la definición. Los argumentos se pueden utilizar o no en la función, pero si una función se define con argumentos, la llamada a la función debe incluir todos los argumentos indicados en la definición.

function nombreDelaFuncion($argumento_1, $argumento_2, etc ...) {
    bloque_de_sentencias
}

En este apartado se trata el caso más sencillo, es decir, cuando los argumentos son simplemente valores (número, cadenas, matrices, etc.). En los dos apartados siguientes se tratan los casos en los que los argumentos son variables del programa principal.

Funciones con argumentos: paso por valor

Cuando llamamos a una función escribiendo como argumento una variable del programa principal, lo único que se envía es el valor de la variable. En programación está situación se suele llamar "paso por valor".

Funciones con argumentos: paso por referencia

Por completar. No se utiliza en los ejercicios propuestos en estos apuntes.

manual de PHP: Paso por referencia

Funciones que devuelven valores

De la misma manera que el programa principal puede enviar valores a una función, una función puede devolver uno o varios valores al programa principal. La palabra reservada return permite indicar la variable que se devuelve.

Funciones con argumentos predeterminados

En PHP se pueden definir funciones con argumentos predeterminados, de manera que si en la llamada a la función no se envía un argumento, la función asume un valor predeterminado. Lógicamente, los argumentos predeterminados deben ser los últimos en la lista de argumentos, para evitar ambigüedades.

Los argumentos predeterminados se establecen en la definición de la función, igualando el nombre del argumento a su valor predeterminado.

El ejemplo siguiente muestra una función que calcula diferentes tipos de media (aritmética, geométrica, armónica). Los argumentos de la función son los números cuya media se debe calcular y el tipo de media a calcular. En el ejemplo, el tipo de media predeterminado es la media aritmética.

<?php
// ESTA ES LA DEFINICIÓN DE LA FUNCIÓN calculaMedia
function calculaMedia($arg1, $arg2, $arg3 = "aritmética")
{
    if ($arg3 == "aritmética") {
        $media = ($arg1 + $arg2) / 2;
    } elseif ($arg3 == "geométrica") {
        $media = sqrt($arg1 * $arg2) / 2;
    } elseif ($arg3 == "armónica") {
        $media = 2 * ($arg1 * $arg2) / ($arg1 + $arg2);
    }
    return $media;
}

// ESTO SON EJEMPLOS DE USO DE LA FUNCIÓN calculaMedia
$dato1 = 12;
$dato2 = 16;

// EL TERCER ARGUMENTO INDICA EL TIPO DE MEDIA A CALCULAR
$media = calculaMedia($dato1, $dato2, "geométrica");
print "<p>La media geométrica de $dato1 y $dato2 es $media.</p>\n";
print "\n";

// AL NO PONER EL TERCER ARGUMENTO, DEVUELVE LA MEDIA ARITMÉTICA
$media = calculaMedia($dato1, $dato2);
print "<p>La media aritmética de $dato1 y $dato2 es $media.</p>\n";
?>
<p>La media geométrica de 12 y 16 es 6.9282032302755.</p>

<p>La media aritmética de 12 y 16 es 14.</p>

Funciones con un número de argumentos indeterminados

Por completar. No se utiliza en los ejercicios propuestos en estos apuntes.