14

是否可以设置一个类,以便如果未定义方法,而不是抛出错误,它会转到一个包罗万象的函数?

这样如果我调用$myClass->foobar();但 foobar 从未在类定义中设置,其他方法会处理它吗?

4

4 回答 4

19

是的,它正在超载

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();
于 2011-06-06T16:07:31.917 回答
6

您想使用__call()来捕获被调用的方法及其参数。

于 2011-06-06T16:06:52.103 回答
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'
于 2011-06-06T16:07:01.243 回答
1

魔法方法。特别是__call()

于 2011-06-06T16:06:36.790 回答