Tipos
PHP Manual

Llamadas de retorno

Las llamadas de retorno se pueden indicar 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 como parámetro funciones de llamada de retorno definidas por el usuario. 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.

Pasar una función de llamada de retorno

Una función de PHP se pasa por su nombre como un string. Se puede utilizar cualquier función nativa o definida por el usuario, exceptuando contrucciones del lenguaje, tales como: array(), echo, empty(), eval(), exit(), isset(), list(), print o unset().

Un método de un object instanciado se pasa como un array que contiene un object en el índice 0 y el nombre del método en el índice 1.

Los métodos de clase estáticos también se pueden pasar sin instanciar un object de dicha clase, pasando 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 llamadas de retorno anónimas. A partir de PHP 5.3.0 también es posible pasar una clausura a un parámetro de una llamada de retorno.

Ejemplo #1 Ejemplos de funciones de llamadas de retorno

<?php

// Un ejemplo de función de llamada de retorno
function mi_función_de_llamada_de_retorno() {
    echo 
'¡hola mundo!';
}

// Un ejemplo de método de llamada de retorno
class MiClase {
    static function 
miMétodoDeLlamadaDeRetorno() {
        echo 
'¡Hola Mundo!';
    }
}

// Tipo 1: Llamada de retorno simple
call_user_func('mi_función_de_llamada_de_retorno'); 

// Tipo 2: Llamada a un método de clase estático
call_user_func(array('MiClase''miMétodoDeLlamadaDeRetorno')); 

// Tipo 3: Llamada al método de un objeto
$obj = new MiClase();
call_user_func(array($obj'miMétodoDeLlamadaDeRetorno'));

// Tipo 4: Llamada a un método de clase estático (A partir de PHP 5.2.3)
call_user_func('MiClase::miMétodoDeLlamadaDeRetorno');

// Tipo 5: Llamada a un método de clase estático relativo (A partir de PHP 5.3.0)
class {
    public static function 
quién() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
quién() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::quién')); // A
?>

Ejemplo #2 Ejemplo de llamada de retorno utilizando una clausura

<?php
// Nuestra clausura
$doble = function($a) {
    return 
$a 2;
};

// Este es nuestro rango de números
$números range(15);

// Usar la clausura como llamada de retorno para
// doblar el valor de cada elemento de nuestro
// rango
$números_nuevos array_map($doble$números);

print 
implode(' '$números_nuevos);
?>

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 apuntara al object real, y no a una copia del mismo. Para más detalles, véase la Explicación de las referencias.

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.


Tipos
PHP Manual