Подтвердить что ты не робот

PHP - метод catchall в классе

Есть ли возможность создать класс, чтобы, если метод не определен, вместо того, чтобы бросать ошибку, он перейдет к функции catch-all?

такой, что если я вызываю $myClass->foobar();, но foobar никогда не был установлен в определении класса, какой-то другой метод будет обрабатывать его?

4b9b3361

Ответ 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'