Definición
- Para definir una función en PHP se utiliza la palabra
function
. - Trate de definir las funciones de forma que definan lo que hacen. Una idea es establecer la combinación verbo y sustantivo. Ejemplo:
inicializarVariables()
- PHP no admite sobrecarga de funciones.
- Las funciones admiten recursividad. Sin embargo, las llamadas a funciones/métodos recursivos con más de 100-200 niveles de recursividad pueden agotar la pila y ocasionar la finalización del script en curso. Especialmente, las recursividades infinitas están consideradas un error de programación.
- Los nombres de las funciones son insensibles a mayúsculas-minúsculas, aunque es una buena idea llamar a las funciones tal y como aparecen en sus declaraciones.
- Todas las funciones y clases de PHP tienen ámbito global. Se pueden llamar desde fuera de una función incluso si fueron definidas dentro, y viceversa.
- Hasta la versión 5 de PHP no se podía definir el tipo de retorno, cosa que en la versión 7 es posible
<?php function suma($a, $b) { return $a + $b; } suma (3, 8); // Devuelve 11
<?php // En PHP 7.0 es posible definir el retorno de una función // y también definir el tipo de dato de los parámetros. function sumaEnteros(int $a, int $b): int { return $a + $b; } sumaEnteros(2, 3.5); // Suma 5 sumaEnteros(3, 'a'); // Genera error
<?php // Declarando Modo Estricto para la función declare(strict_types=1); function sumaEnteros(int $a, int $b): int { return $a + $b; } var_dump(sumaEnteros(3, 3.5)); // Error, el segundo parametro es float
Valores por defecto
Puede utilizar valores por defecto en los parámetros de una función.
<?php function viajar($transporte = 'a pie') { echo 'Viajaré... ', $transporte; } // Prueba viajar('en tren.'); // Viajaré... en tren viajar(); // Viajaré... a pie
Es de hacer notar que si hay varios parámetros en la función y no todos tienen valores por defecto, los que sí lo tienen deben quedar en las últimas posiciones de la función.
<?php function hacerPastel($tipo = 'normal', $sabor) { echo 'El pastel es ', $tipo, ', el sabor es de ', $sabor; } hacerPastel('chocolate'); // Error, valor indefinido de $sabor
Parámetros dinámicos
Es posible tener funciones que permitan establecer un número de parámetros indefinidos.
<?php function sumatoria() { // Obtener el total de parametros en una función $numeroParametros = func_num_args(); // Obtener el arreglo de parametros $arregloParametros = func_get_args(); $total = 0; for ($i = 0; $i < $numeroParametros; $i++) { $total += $arregloParametros[$i]; } return $total; } var_dump(sumatoria(1, 'x')); var_dump(sumatoria(1, 2, 3)); var_dump(sumatoria(1, 2, 3, 4));
A partir de PHP 7, es posible simplificar la declaración de la función si estos manejan un tipo de datos específico.
<?php function sumatoria(int ...$params) { $total = 0; for ($i = 0; $i < count($params); $i++) { $total += $params[$i]; } return $total; } var_dump(sumatoria(1, 2)); var_dump(sumatoria(1, 2, 3)); var_dump(sumatoria(1, 2, 3, 4));
Parámetros por Valor y por Referencia
Al igual que en la asignación de variables, dentro de los parámetros de una función pueden pasarse por valor o por referencia.
<?php // Argumento pasado por valor function duplicarValor($parametro) { $parametro *= 2; } $a = 10; // $a = 10 duplicarValor($a); // $a = 20 var_dump($a); // $a = 10, la variable no cambia
<?php // Argumento pasado por referencia function duplicarReferencia(& $parametro) { $parametro *= 2; } $b = 10; // $b = 10 duplicarReferencia($b); // $b = 20 var_dump($b); // $b = 20, la variable cambia
Funciones Condicionales
<?php // Funciones condicionales. La función uno() no existe hasta evaluar el IF $hacer = true; if ($hacer) { function uno() { echo 'Llamado a uno()'; } } uno(); // Solo será llamado si la condición es TRUE
Funciones Dentro de Funciones
<?php // Funciones dentro de funciones. // Mientras no se llama a externa(), interna() no existe. function externa() { function interna() { echo 'Llamado a interna()'; } } //interna(); // Las funciones y clases tiene un ámbito global. // Se pueden llamar desde fuera de una función incluso // si fueron definidas internamente. externa(); interna();
Funciones Anónimas
Son funciones que no tienen nombre, denominadas también funciones Lambda.
<?php $saludo = function($mensaje) { echo "Hola ", $mensaje; }; $saludo('Mundo'); // Imprime 'Hola Mundo' $saludo('PHP'); // Imprime 'Hola PHP'
Es posible establecer argumentos de funciones, utilizando otras funciones.
<?php function saludar($mensaje) { echo 'Hola ', $mensaje; } saludar(function () { return $mensaje; });
Cuando se accede una variable que está fuera del ámbito de una función se denomina Closure.
$persona = "Pedro"; $saludo = function() use ($persona) { echo "Hola $persona"; }; $saludo();