0

我正在编写一个__call()用于处理一些魔术函数的类,没有父类,我找不到允许我将责任传递给我的实现未处理的方法的语法:__call()

call_user_func_array([$this, $methodCalled], $arguments) //- infinite loop
call_user_method_array($methodCalled, $this, $arguments) //- infinite loop
parent::__call($methodCalled, $arguments) //- doesn't work if I don't *have* a parent (or even if I do have a parent, if that parent doesn't define __call())

我已经没有办法处理这个案子了,谷歌不是我的朋友 :-(

4

1 回答 1

0

我想你想要这样的东西:

public function __call($method, $args) {
    switch($method) {
        case "MethodA":
            // handle it
            break;
        case "MethodB":
            // handle it
            break;
        default:
            $parent = get_parent_class();
            if ($parent && (method_exists($parent, $method) || method_exists($parent, '__call')))
                return parent::__call($method, $args);
            else
                trigger_error("Call to unhandled __call function $method()", E_USER_ERROR);
    }
}

您可以将其放置在子类和父类中。如果子进程未处理调用,子进程将查看其父进程是否可以处理它,否则会触发错误。

于 2014-07-07T11:19:37.153 回答