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. Sintaxisfunció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
ofunc_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