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())

このケースを処理する方法についてのアイデアが尽きており、Google は私の味方ではありません :-(

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 に答える