是否需要设置一个类,以便在没有定义方法的情况下,而不是抛出错误,它会转到catch-all函数?
如果我调用$myClass->foobar();
但是foobar从未在类定义中设置,那么其他一些方法会处理它吗?
答案 0 :(得分:17)
是的,它是overloading:
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();
答案 1 :(得分:6)
您希望使用__call()来捕获被调用的方法及其参数。
答案 2 :(得分:6)
是的,您可以使用__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'
答案 3 :(得分:1)