Tipos
PHP Manual

Callbacks / Callables

Callbacks podem ser representadas pela declaração de tipo callable a partir do PHP 5.4. Esta documentação utiliza 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 parâmetro. Funções de callback não precisam ser apenas funções simples, mas também métodos de objetos, incluindo os estáticos.

Passagem por parâmetro

Uma função PHP é passada através do seu nome como uma string. Qualquer função interna 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 objeto instanciado é passado como um array contendo um objeto no índice 0 e o nome do método no índice 1. Acessar métodos protegidos e privados de uma classe é permitido.

Métodos estáticos também podem ser passados sem a instância de um objeto dessa classe ao passar o nome da classe ao invés de um objeto 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

// Type 6: Objetos que implementam __invoke podem sere utilizados como callables (desde o PHP 5.3)
class {
    public function 
__invoke($name) {
        echo 
'Hello '$name"\n";
    }
}

$c = new C();
call_user_func($c'PHP!');
?>

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 referência para criar um callback que realmente aponta para o objeto, 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