Entendiendo las funciones callback de PHP
Aprende qué son las funciones callback de PHP, sus cuatro formas de escritura y cómo usarlas con array_map, usort y otros hooks de frameworks.
Un callback (o "callable") es una función que se pasa a otra función para que pueda ser invocada más adelante. Los callbacks son la base de las funciones de orden superior de PHP — array_map, usort, array_filter y muchos hooks de frameworks esperan que les pases un callback. Este capítulo explica qué cuenta como callable en PHP, las cuatro formas de escribir uno y cómo usarlos en el código cotidiano.
Esta página asume que ya entiendes las funciones PHP básicas. Si eres nuevo definiendo funciones, lee eso primero.
¿Qué son las funciones callback de PHP?
Una función callback de PHP es cualquier función que se pasa como argumento a otra función y luego se invoca desde su interior. PHP reconoce un valor como callable en cuatro formas:
- Una cadena con el nombre de la función —
'strtoupper'hace referencia a la función incorporadastrtoupper(). - Una función anónima (closure) —
function () { ... }asignada a una variable o pasada directamente. - Una arrow function —
fn() => ..., una forma abreviada para closures cortos (PHP 7.4+). - Una referencia a objeto/método —
[$object, 'methodName']o['ClassName', 'staticMethod'].
El type hint para un parámetro que acepta cualquiera de estas formas es callable. Puedes invocar el valor directamente ($callback()) o con call_user_func() / call_user_func_array() cuando necesites reenviar una lista dinámica de argumentos.
¿Por qué usar funciones callback de PHP?
Los callbacks te permiten escribir una función una vez y personalizar su comportamiento en el lugar de llamada, sin reescribirla:
- Reutilización. Una función genérica (por ejemplo, "recorre esta lista y haz algo con cada elemento") funciona para cualquier tarea que suministres como callback.
- Lógica más limpia. Las funciones de orden superior incorporadas como
array_mapyarray_filterreemplazan los bucles manuales con una sola línea declarativa. - Desacoplamiento. El código orientado a eventos — manejadores de formularios, procesadores de comandos CLI, hooks de frameworks — registra un callback que se ejecuta solo cuando el evento ocurre, manteniendo separados el disparador y el manejador.
Cómo usar las funciones callback de PHP
Usar funciones callback de PHP es sencillo. Simplemente pasas el nombre de la función o la función anónima como argumento a la función padre. A continuación se muestra un ejemplo de cómo usar una función con nombre como callback:
Ejemplo PHP de cómo usar una función con nombre como callback
En el ejemplo anterior, myCallbackFunction se pasa como argumento a parentFunction. Cuando se ejecuta parentFunction, llama a call_user_func y pasa myCallbackFunction como argumento. Como resultado, myCallbackFunction se ejecuta y muestra el mensaje "The callback function has been executed."
A continuación se muestra un ejemplo de cómo usar una función anónima como callback:
Ejemplo PHP de cómo usar una función anónima como callback
En este ejemplo, la función anónima se asigna a la variable $myCallbackFunction. Esta variable puede pasarse luego como argumento a parentFunction, igual que la función con nombre en el ejemplo anterior.
A partir de PHP 7.4, también puedes usar la sintaxis concisa de arrow function (fn) para callbacks simples. Las arrow functions capturan automáticamente variables del ámbito padre y proporcionan una sintaxis más limpia para callbacks cortos:
$myCallback = fn() => print("The arrow callback function has been executed.");
parentFunction($myCallback);Pasar argumentos a un callback
La mayoría de los callbacks útiles reciben datos. La función padre decide qué argumentos pasar cuando invoca el callback. Usa call_user_func() para pasarlos de forma posicional, o call_user_func_array() para reenviar un array de argumentos:
<?php
function applyToPair(callable $callback, int $a, int $b) {
return call_user_func($callback, $a, $b);
}
$add = fn(int $x, int $y) => $x + $y;
$multiply = fn(int $x, int $y) => $x * $y;
echo applyToPair($add, 4, 6); // 10
echo "\n";
echo applyToPair($multiply, 4, 6); // 24Aquí applyToPair no sabe si está sumando o multiplicando — esa decisión reside en el callback que le pasas.
Usar callbacks con funciones incorporadas
El lugar más común donde usarás callbacks son las funciones de array de PHP. Toman un callback y lo aplican a toda una lista, reemplazando los bucles escritos a mano.
<?php
$numbers = [1, 2, 3, 4, 5];
// array_map: transform every element
$squares = array_map(fn($n) => $n * $n, $numbers);
echo implode(', ', $squares); // 1, 4, 9, 16, 25
echo "\n";
// array_filter: keep elements where the callback returns true
$evens = array_filter($numbers, fn($n) => $n % 2 === 0);
echo implode(', ', $evens); // 2, 4
echo "\n";
// usort: sort using a comparison callback (descending order)
$values = [3, 1, 4, 1, 5];
usort($values, fn($a, $b) => $b <=> $a);
echo implode(', ', $values); // 5, 4, 3, 1, 1Para más información sobre la ordenación, consulta Ordenar arrays en PHP.
Usar métodos de objetos como callbacks
Un callback también puede apuntar a un método. Pasa [$object, 'methodName'] para un método de instancia, o ['ClassName', 'staticMethod'] para uno estático:
<?php
class Greeter {
public function greet(string $name): string {
return "Hello, {$name}!";
}
public static function shout(string $name): string {
return strtoupper("Hi {$name}");
}
}
$greeter = new Greeter();
// Instance method as a callback
echo call_user_func([$greeter, 'greet'], 'Ada'); // Hello, Ada!
echo "\n";
// Static method as a callback
echo call_user_func(['Greeter', 'shout'], 'Ada'); // HI ADAConsejo: Desde PHP 8.1 puedes usar la sintaxis first-class callable —
$greeter->greet(...)ostrtoupper(...)— para obtener unClosurea partir de cualquier callable sin necesidad de citar strings, lo que es más seguro y compatible con el IDE.
Conclusión
En conclusión, las funciones callback de PHP son una herramienta poderosa para la programación en PHP. Permiten la reutilización de código, simplifican el código complejo y habilitan la programación orientada a eventos del lado del servidor. Al entender cómo usar las funciones callback de PHP, puedes llevar tus habilidades de PHP al siguiente nivel.