Las llamadas de retorno se pueden representar con el tipo callable a partir de PHP 5.4. Esta documentación utilizó la información del tipo callback con el mismo propósito.
algunas funciones como call_user_func() o usort() aceptan funciones de llamadas de retorno definidas por el usuario como parámetro. Las funciones de llamadas de retorno no sólo pueden ser funciones simples, sino también métodos de un object, incluyendo métodos de clase estáticos.
Una función PHP se pasa por su nombre como una string. Se puede utilizar cualquier función nativa o definida por el usuario, excepto contrucciones del lenguaje, tal como: array(), echo, empty(), eval(), exit(), isset(), list(), print o unset().
Un método de un object instanciado se pasa como un array conteniendo un object en el índice 0 y el nombre del método en el índice 1.
Métodos de clase estáticos también se pueden pasar sin instanciar un object de una clase al pasar el nombre de la clase en lugar de un object en el índice 0. A partir de PHP 5.2.3, también es posible pasar 'NombreDeClase::nombreDeMetodo'.
Además de las funciones definidas por el usuario normales, también se puede utilizar la función create_function() para crear funciones de devolución de llamadas anónimas. A partir de PHP 5.3.0 también es posible pasar un cierre a un parámetro de llamada de retorno.
Ejemplo #1 Ejemplos de funciones de llamadas de retorno
<?php
// Un ejemplo de función de llamada de retorno
function my_callback_function() {
echo 'hello world!';
}
// Un ejemplo de método de llamada de retorno
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Tipo 1: Llamada de retorno simple
call_user_func('my_callback_function');
// Tipo 2: Llamada a un método de clase estático
call_user_func(array('MyClass', 'myCallbackMethod'));
// Tipo 3: Llamada al método de un objeto
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Tipo 4: Llamada a un método de clase estático (A partir de PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Tipo 5: Llamada a un método de clase estático relativo (A partir de PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
Ejemplo #2 Ejemplo de llamada de retorno utilizando un cierre o función anónima
<?php
// Nuestro cierre
$double = function($a) {
return $a * 2;
};
// Este es nuestro rango de números
$numbers = range(1, 5);
// Aquí utilizamos el cierre como llamada de retorno
// para doblar el valor de cada elemento en nuestro
// rango
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
El resultado del ejemplo sería:
2 4 6 8 10
Nota: En PHP 4, era necesario usar una referencia para crear una llamada de retorno que apunte al object real, y no a una copia del mismo. Para más detalles, vea las Referencias Explicadas.
Nota:
Las funciones de retorno de llamada que se registran con funciones como call_user_func() y call_user_func_array() no se llamarán si se produce una excepción en la función de retorno previa.