PHP - метод catchall в классе
Есть ли возможность создать класс, чтобы, если метод не определен, вместо того, чтобы бросать ошибку, он перейдет к функции catch-all?
такой, что если я вызываю $myClass->foobar();
, но foobar никогда не был установлен в определении класса, какой-то другой метод будет обрабатывать его?
Ответы
Ответ 1
Да, это перегрузка:
class Foo {
public function __call($method, $args) {
echo "$method is not defined";
}
}
$a = new Foo;
$a->foo();
$b->bar();
Как и в PHP 5.3, вы также можете сделать это со статическими методами:
class Foo {
static public function __callStatic($method, $args) {
echo "$method is not defined";
}
}
Foo::hello();
Foo::world();
Ответ 2
Вы хотите использовать __ call(), чтобы поймать вызываемые методы и их аргументы.
Ответ 3
Да, вы можете использовать магический метод __ call, который вызывается, когда подходящий метод не найден. Пример:
class Foo {
public function __call($name, $args) {
printf("Call to %s intercepted. Arguments: %s", $name, print_r($args, true));
}
}
$foo = new Foo;
$foo->bar('baz'); // Call to bar intercepted. Arguments: string(3) 'baz'
Ответ 4
Волшебные методы. В частности, __ call().