PHP: Interceptar métodos inexistentes (__call) | CODARE
← Javascript: Executando scripts após o carregamento da página
Tcl/Tk: Reduzindo linhas →
Palavras-chave: PHP, __call, métodos dinâmicos, orientação a objetos
O PHP tem uma função mágica chamada __call(). Se sua classe declarar um método com este nome, ele será invocado sempre que for feita uma chamada a um método não existente naquela classe.
Esta invocação receberá como parâmetro o nome do método chamado e os argumentos. É um mecanismo tradicional e simples, mas muito poderoso. Já existia no Smalltalk, através da mensagem doesNotUnderstand, que tinha exatamente a mesma semântica.
As aplicações são diversas: interceptação de chamadas, proxying, dynamic dispatching etc. Estas brincadeiras divertidas são muito úteis para a construção de bibliotecas e frameworks dinâmicos, por exemplo, para web ou mapeamento objeto-relacional.
class ClasseComTodosOsMetodosDoMundo
echo "Método invocado: $m\n";
$o = new ClasseComTodosOsMetodosDoMundo();
$o->umMetodoQualquer();
$o->umMetodoAssimAssado();
Que vai ter a saída:
Método invocado: umMetodoQualquer
Método invocado: umMetodoAssimAssado
6 Responses to PHP: Interceptar métodos inexistentes (__call)
Pingback: rascunho » Blog Archive » links for 2007-09-29
08/10/2007 at 12:57
A única coisa que conta "contra" isso é o fato dos editores como Zend e PDT não terem como "auto-completar" ou listar os métodos existentes.
08/10/2007 at 15:48
É o mesmo que o method_missing de Ruby. :-)
31/01/2008 at 17:46
No te voy a poder contestar en portugues y he de decir que tu nivel de español es realmente bueno..! Tampoco te hablaré de Java.. pero te mando un beso desde Bilbao, hasta siempre pecoso!
Anibal Sólon says:
02/01/2010 at 21:11
Complementando, no PHP 5.3 foi implementado o método __callStatic, para quando for chamado um método de forma estática não-declarado, chame esta função: