PHP - 类中的catchall方法

时间:2011-06-06 16:02:06

标签: php oop class methods catch-all

是否需要设置一个类,以便在没有定义方法的情况下,而不是抛出错误,它会转到catch-all函数?

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

4 个答案:

答案 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)

Magic methods。特别是__call()