• No se han encontrado resultados

strcasecmp Comparación de cadenas (sensible a mayúsculas y minúsculas o no) [s]printf

2. Declaración y llamada

La palabra clave

función

permite introducir la definición de una función. Sintaxis

función nombre_función([parámetro]) { instrucciones;

}

Si la función devuelve un valor, es posible utilizar la instrucción

return

para definir el valor de retorno de la función (véase la sección Funciones - Valor de retorno).

El nombre de la función no debe ser una palabra reservada de PHP (nombre de función nativa, de instrucción) o ser igual al nombre de otra función definida de antemano.

Una función de usuario se puede llamar como una función nativa de PHP: en una asignación, en una comparación...

Ejemplo <?php

// Función sin parámetro que muestra "¡Hola!" // sin valor de retorno.

función mostrar_hola() { echo ’¡Hola!<br />’; }

// Función con 2 parámetros que devuelve el producto // de los dos parámetros.

función producto($valor1,$valor2) { return $valor1 * $valor2;

}

// Llamada de la función mostrar_hola. mostrar_hola();

http://www.eni-training.com/client_net/mediabook.aspx?idR=85142 2/15

Resultado ¡Hola! 2 x 4 = 8

10 x 12 es superior a 100.

En el lenguaje PHP, no existe un procedimiento real. Para definir algo equivalente a un procedimiento, basta con definir una función que no devuelva ningún valor y llamar a la función como si se tratara de una instrucción (como la función

mostrar_hola

, por ejemplo).

Desde la versión 5.4, cuando una función devuelve una matriz, es posible acceder directamente a un elemento de la matriz llamando a la función con una sintaxis de tipo

función(...)[clave]

.

Ejemplo <?php

// Definición de una función que devuelve una matriz. function quien() {

return [’Olivier’,’Heurtel’]; }

// Llamada a la función y recuperación directa del nombre almacenado // en el índice 0 de la matriz devuelta.

$nombre = quien()[0];

echo "quien()[0] = $nombre<br />"; ?>

Resultado

quien()[0] = Olivier

Esta técnica funciona también cuando la función devuelve una matriz multidimensional con una sintaxis de tipo

función(...)[clave1][clave2]

.

Es posible utilizar una función antes de definirla. Ejemplo

<?php

// Utilización de la función producto. echo producto(5,5);

// Definición de la función producto. función producto($valor1,$valor2) { return $valor1 * $valor2;

} ?> Resultado

http://www.eni-training.com/client_net/mediabook.aspx?idR=85142 3/15

Ejemplo

Archivo

funciones.inc

que contiene la definición de funciones: <?php

// Definición de la función producto. función producto($valor1,$valor2) { return $valor1 * $valor2;

} ?>

Script que utiliza las funciones definidas en

funciones.inc

: <?php

// Inclusión del archivo contenedor de la definición de las funciones. include(’funciones.inc’);

// Utilización de la función producto. echo producto(5,5);

?>

Función variable

PHP ofrece una "función variable" que permite almacenar un nombre de función en una variable y llamar a la variable en una instrucción, como si se tratara de una función, con la notación

$variable()

. En tal escritura, PHP sustituye la variable por su valor y trata de ejecutar la función correspondiente (que debe, por supuesto, existir).

Ejemplo <?php

// Función que efectúa un producto. función producto($valor1,$valor2) { return $valor1 * $valor2;

}

// Función que efectúa una suma. función suma($valor1,$valor2) { return $valor1 + $valor2; }

// Función que efectúa un cálculo, el nombre del cálculo // (’suma’ o ’producto’) se pasa como parámetro.

función calcular($operación,$valor1,$valor2) { // $operación contiene el nombre de la función // a ejecutar => llamada $operación().

return $operación($valor1,$valor2); }

// Utilización de la función calcular.

echo ’3 + 5 = ’,calcular(’suma’,3,5).’<br />’; echo ’3 x 5 = ’,calcular(’producto’,3,5).’<br />’; ?>

http://www.eni-training.com/client_net/mediabook.aspx?idR=85142 4/15

Los parámetros (también llamados argumentos) posibles de la función se definen en forma de una lista de variables.

En este tercer punto, vamos a estudiar las siguientes posibilidades: definir un valor predeterminado para un parámetro;

pasar un parámetro por referencia; utilizar una lista variable de parámetros. Valor predeterminado

Es posible indicar que un parámetro tenga un valor predeterminado con la siguiente sintaxis: $parámetro = expresión literal

El valor predeterminado de un parámetro debe ser una expresión literal y puede ser ni una variable, ni una función, ni una expresión compuesta.

El valor predeterminado se utiliza como valor de un parámetro cuando se llama a la función, sin mencionar el valor para el parámetro en cuestión.

Ejemplo <?php

// Definición de una constante define(’UNO’,1);

// Definición de la función producto con valores

// predeterminados para los parámetros (incluyendo una constante // para el primer parámetro).

función producto($valor1=UNO,$valor2=2) { return $valor1* $valor2;

}

// Llamadas

// - sin parámetro

echo ’producto() = ’,producto(),’<br />’;

// - con un único parámetro = obligatoriamente el primero echo ’producto(3) = ’,producto(3),’<br />’;

?> Resultado

producto() = 2 producto(3) = 6

No dar ningún valor a un parámetro que tenga un valor predeterminado sólo es posible desde la derecha. Pase un valor "vacío" ("" o

NULL

) no resuelve el problema porque PHP convierte el valor en cuestión en el tipo apropiado (en este caso, entero igual a 0).

http://www.eni-training.com/client_net/mediabook.aspx?idR=85142 5/15

Por defecto, el pase de parámetros se realiza por valor: se trata de una copia del valor que se pasa a la función. Por lo tanto, la modificación de los parámetros dentro de la función no tiene efecto sobre los valores en el script de llamada.

Ejemplo <?php

// Definición de una función que toma un parámetro. función por_valor($parámetro) {

// Incrementación del parámetro. $parámetro++;

// Visualización del parámetro en el interior de la función. echo "\$parámetro = $parámetro<br />";

}

// Inicialización de una variable. $x = 1;

// Visualización de la variable antes de la llamada a la función. echo "\$x antes de la llamada = $x<br />";

// Llamada de la fonction utilizando la variable como valor // del parámetro.

por_valor($x);

// Visualización de la variable después de la llamada a la función. echo "\$x después de la llamada = $x<br />";

?> Resultado

$x antes de la llamada = 1 $parámetro = 2

$x después de la llamada = 1

Si es necesario, es posible tener un pase de referencia utilizando el operador de referencia & (véase el capítulo Operadores - sección El operador de asignación por referencia) delante del nombre del parámetro en la definición de la función. Con esta definición, a la función se le pasa una referencia a la variable (no una copia); esta última trabaja directamente en la variable del script de llamada.

Ejemplo <?php

// Definición de una función que toma un parámetro. función por_referencia(&$parámetro) {

// Incrementación del parámetro. $parámetro++;

// Visualización del parámetro en el interior de la función. echo "\$parámetro = $parámetro<br />";

}

// Inicialización de una variable. $x = 1;

// Visualización de la variable antes de la llamada a la función. echo "\$x antes de la llamada = $x<br />";

// Llamada de la fonction utilizando la variable como valor

www.FreeLibros.me

http://www.eni-training.com/client_net/mediabook.aspx?idR=85142 6/15

Función Función

func_num_args

Indica el número de parámetros pasados a la función.

func_get_args

Devuelve la lista de parámetros pasados a la función (en una matriz).

func_get_arg

Devuelve el valor de un parámetro cuyo número se especifica.

número

Número del parámetro solicitado (0 = primer parámetro). $parámetro = 2

$x después de la llamada = 2

Con esta definición, no es posible pasar constante o una expresión como valor del parámetro. Ejemplos prohibidos

por_referencia(2); por_referencia(1+1);

por_referencia(UNO); // UNO = constante definida anteriormente Lista variables de parámetros

Dentro de una función, es posible utilizar las siguientes tres funciones de PHP:

Sintaxis

entero func_num_args() matriz func_get_args()

mixto func_get_arg(entero número)

Gracias a estas funciones nativas, es muy fácil escribir una función que acepta un número variable de parámetros. Los principios son los siguientes:

declarar la función sin parámetros;

recuperar, en el cuerpo de la función, los parámetros con las funciones

func_get_args

o

func_get_arg

y utilizarlos (normalmente en un bucle). En la práctica, nada impide que los parámetros sean de diferentes tipos.

Por otra parte, es posible declarar explícitamente los parámetros y luego aceptar una lista de variables de parámetros adicionales. En este caso, los parámetros explícitamente declarados se retoman en el recuento y en la lista de parámetros. Por tanto, es necesario eliminarlos del procesamiento.

Ejemplo <?php

// Función que acepta un primer parámetro por referencia

www.FreeLibros.me

http://www.eni-training.com/client_net/mediabook.aspx?idR=85142 7/15

expresión

Expresión cuyo resultado constituye el valor de retorno de la función.

// Recuperar los parámetros en una matriz // y eliminar el primer elemento (el primer // parámetro).

$parámetros = func_get_args(); unset($parámetros[0]);

// Inicializar el resultado a 1. $resultado = 1;

// Hacer un bucle en la matriz de parámetros // para multiplicar el resultado por el parámetro. foreach($parámetros as $parámetro) { $resultado *= $parámetro; } break; } } // llamadas producto($resultado);

echo ’producto($resultado) => ’,$resultado,’<br />’; producto($resultado,1,2,3);

echo ’producto($resultado,1,2,3) => ’,$resultado,’<br />’; ?>

Resultado

producto($resultado) => 0 producto($resultado,1,2,3) => 6