Tipos
PHP Manual

Callbacks / Callables

Callbacks podem ser representados pelo type hint callable a partir do PHP 5.4. Esta documentação usa o tipo callback para referenciar a mesma coisa.

Algumas funções como call_user_func() ou usort() aceitam funções de callback definidas pelo usuário como parametro. Funções de callback podem ser não apenas funções simples, mas também métodos de objects, incluindo os estáticos.

Passagem por parâmetro

Uma função PHP é passada através do seu nome como uma string. Qualquer função padrão ou definida pelo usuário pode ser utilizada, com exceção dos construtores de linguagem como: array(), echo, empty(), eval(), exit(), isset(), list(), print ou unset().

Um método de um object instanciado é passado como um array contendo um object no índice 0 e o nome do método no índice 1.

Métodos estáticos também podem ser passadas sem a instância de um object dessa classe ao passar o nome da classe ao invés de um object no índice 0. A partir do PHP 5.2.3, também é possível utilizar 'NomeDaClasse::nomeDoMetodo'.

Além de funções comuns definidas pelo usuário, funções anônimas também podem ser passadas como um parâmetro de callback.

Exemplo #1 Exemplos de funções de callback

<?php 

// Exemplo de função de callback
function my_callback_function() {
    echo 
'hello world!';
}

// Exemplo de método de callback
class MyClass {
    static function 
myCallbackMethod() {
        echo 
'Hello World!';
    }
}

// Tipo 1: Calback simples
call_user_func('my_callback_function'); 

// Tipo 2: Chamada à métodos estáticos
call_user_func(array('MyClass''myCallbackMethod')); 

// Tipo 3: Chamada à metodos de objetos
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Tipo 4: Chamada à métodos estáticos (a partir do PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Tipo 5: Chamada relativa à métodos estáticos (a partir do PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

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

call_user_func(array('B''parent::who')); // A
?>

Exemplo #2 Exemplo de Callback utilizando uma Closure

<?php
// Nossa closure
$double = function($a) {
    return 
$a 2;
};

// Este é a série de números
$numbers range(15);

// O uso da closure aqui para 
// dobrar o valor de cada elemento de nossa
// série
$new_numbers array_map($double$numbers);

print 
implode(' '$new_numbers);
?>

O exemplo acima irá imprimir:

2 4 6 8 10

Nota: No PHP 4, era necessário o uso de referencia para criar um callback que aponta realmente para o object, e não para uma cópia dele. Para maiores detalhes, veja Explicação sobre referências.

Nota:

Callbacks registrados com funções como call_user_func() e call_user_func_array() não serão chamados caso haja uma exceção não-pega lançada em um callback anterior.


Tipos
PHP Manual