Las funciones encapsulan bloques de código reutilizables. Se declaran con function:
<?php
function saludar() {
echo "¡Hola!";
}
saludar(); // ¡Hola!
?>
<?php
function sumar($a, $b) {
return $a + $b;
}
$resultado = sumar(5, 3);
echo $resultado; // 8
// Devolver múltiples valores con array
function dividir($a, $b) {
$cociente = intdiv($a, $b);
$resto = $a % $b;
return [$cociente, $resto];
}
[$c, $r] = dividir(10, 3); // 3, 1
?>
<?php
function saludar_persona($nombre = "Invitado") {
return "Hola, $nombre!";
}
echo saludar_persona("Ana"); // Hola, Ana!
echo saludar_persona(); // Hola, Invitado!
?>
<?php
declare(strict_types=1);
function calcular_iva(float $precio, float $porcentaje = 0.21): float {
return $precio * $porcentaje;
}
function obtener_usuario(int $id): ?array {
// ?array significa: devuelve array o null
$usuarios = [
1 => ["nombre" => "Ana", "email" => "ana@mail.com"],
2 => ["nombre" => "Luis", "email" => "luis@mail.com"]
];
return $usuarios[$id] ?? null;
}
echo calcular_iva(100.0); // 21.0
print_r(obtener_usuario(1));
?>
<?php
function test() {
$mensaje = "Dentro de la función";
echo $mensaje;
}
test();
// echo $mensaje; // ¡Error! No existe fuera
?>
<?php
$nombre = "Global";
function test_global() {
global $nombre; // Importa la variable global
echo $nombre;
}
test_global(); // Global
?>
Mantiene su valor entre llamadas a la función:
<?php
function contador() {
static $veces = 0;
$veces++;
echo "Llamada nº $veces\n";
}
contador(); // Llamada nº 1
contador(); // Llamada nº 2
contador(); // Llamada nº 3
?>
Array asociativo que contiene todas las variables globales:
<?php
$precio = 100;
function aplicar_descuento() {
$GLOBALS["precio"] *= 0.9; // Modifica la global
}
aplicar_descuento();
echo $precio; // 90
?>
Los parámetros pasados por referencia modifican la variable original:
<?php
function duplicar(int &$valor) {
$valor *= 2;
}
$numero = 5;
duplicar($numero);
echo $numero; // 10 (se modificó fuera)
?>
PHP permite llamar a una función cuyo nombre está en una variable:
<?php
function suma($a, $b) { return $a + $b; }
function resta($a, $b) { return $a - $b; }
function multi($a, $b) { return $a * $b; }
$operacion = "suma";
echo $operacion(10, 5); // 15
$operacion = "resta";
echo $operacion(10, 5); // 5
// Útil para callbacks y arrays de funciones
$ops = ["suma", "resta", "multi"];
foreach ($ops as $op) {
echo "$op: " . $op(20, 4) . "\n";
}
?>
<?php
// Función sin nombre asignada a variable
$duplicar = function($n) {
return $n * 2;
};
echo $duplicar(5); // 10
// Usar variables del entorno con 'use'
$factor = 3;
$multiplicar = function($n) use ($factor) {
return $n * $factor;
};
echo $multiplicar(10); // 30
?>
<?php
$factor = 2;
$duplicar = fn($n) => $n * $factor;
$numeros = [1, 2, 3, 4];
$resultado = array_map(fn($n) => $n * 2, $numeros);
print_r($resultado); // [2, 4, 6, 8]
?>
<?php
function factorial(int $n): int {
if ($n <= 1) return 1;
return $n * factorial($n - 1);
}
echo factorial(5); // 120
function fibonacci(int $n): int {
if ($n <= 1) return $n;
return fibonacci($n - 1) + fibonacci($n - 2);
}
echo fibonacci(7); // 13
?>
<?php
function sumar_numeros(int ...$numeros): int {
return array_sum($numeros);
}
echo sumar_numeros(1, 2, 3, 4, 5); // 15
// Spread operator para desempaquetar arrays
$args = [1, 2, 3];
echo sumar_numeros(...$args); // 6
?>
| Ámbito | Palabra clave | Acceso | Persiste entre llamadas |
|---|---|---|---|
| Local | — | Solo dentro de la función | No |
| Global | global | Desde cualquier parte | Sí |
| Estática | static | Solo dentro de la función | Sí |
| Superglobal | $GLOBALS | Desde cualquier parte | Sí |
es_par(int $n): bool que devuelva true si el número es par.static.array_map para elevar al cuadrado cada elemento de [1,2,3,4,5].... y devuelva su media.