是否可以设置一个类,以便如果未定义方法,而不是抛出错误,它会转到一个包罗万象的函数?
这样如果我调用$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'