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();