类中的PHP-catchall方法

类中的PHP-catchall方法,php,oop,class,methods,catch-all,Php,Oop,Class,Methods,Catch All,是否需要设置一个类,以便在没有定义方法的情况下,该类不会抛出错误,而是转到一个catch all函数 这样,如果我调用$myClass->foobar;但是类定义中从未设置foobar,其他方法将处理它。。特别是,.您希望使用它来捕获被调用的方法及其参数。是的,您可以使用magic方法,在找不到合适的方法时调用该方法。例如: class Foo { public function __call($name, $args) { printf("Call to %s int

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

这样,如果我调用$myClass->foobar;但是类定义中从未设置foobar,其他方法将处理它。

。特别是,.

您希望使用它来捕获被调用的方法及其参数。

是的,您可以使用magic方法,在找不到合适的方法时调用该方法。例如:

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'
是的,是:

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

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

Foo::hello();
Foo::world();

__invoke与_调用不同。如果@changokun想要做$myclass,那么_invoke就是答案+1另外,它是PHP重载,这与其他OOP语言的用法不同,令人费解。
class Foo {
    static public function __callStatic($method, $args) {
        echo "$method is not defined";
    }
}

Foo::hello();
Foo::world();