PHP - 类中的catchall方法

cha*_*kun 14 php oop methods class catch-all

有没有设置一个类,以便如果没有定义一个方法,而不是抛出一个错误,它将转到一个catch-all函数?

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

net*_*der 19

是的,它正在超载:

class Foo {
    public function __call($method, $args) {
        echo "$method is not defined";
    }
}

$a = new Foo;
$a->foo();
$b->bar();
Run Code Online (Sandbox Code Playgroud)

从PHP 5.3开始,您也可以使用静态方法:

class Foo {
    static public function __callStatic($method, $args) {
        echo "$method is not defined";
    }
}

Foo::hello();
Foo::world();
Run Code Online (Sandbox Code Playgroud)


Cra*_*der 6

您希望使用__call()来捕获被调用的方法及其参数.


ale*_*exn 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'
Run Code Online (Sandbox Code Playgroud)