メソッドが定義されていない場合、エラーをスローする代わりにキャッチオール関数に移動するようにクラスをセットアップする方法はありますか?
私が呼び出し$myClass->foobar();
たが foobar がクラス定義に設定されていなかった場合、他のメソッドがそれを処理しますか?
はい、オーバーロードしています:
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();
__call()を使用して、呼び出されたメソッドとその引数をキャッチします。
はい、適切なメソッドが見つからない場合に呼び出される__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'