0

このようなリフレクションを使用して、クラスの他のメソッドからプライベートメソッドを呼び出したい:

class Foo {
    private function bar() {
        print "!@#";
    }
    public function foobar($methodName) {
        $method = new ReflectionMethod(get_class($this), $methodName);
        $method->invoke($this);
    }
}
$foo = new Foo();
$foo->foobar('bar');

このコードはエラーを生成します:

Fatal error: Uncaught exception 'ReflectionException' with message 'Trying to invoke     private method Foo::bar() from scope ReflectionMethod'

同じクラスメソッドのスコープで呼び出しているため、これは私を混乱させます。$this->$methodName(), call_user_func_array(...) を使わずにやりたいことをする方法はありますか? また、$method->setAccessible(true) を使用することは望ましくありません。カプセル化の概念が壊れてしまうからです。

ご清聴ありがとうございました。

4

0 に答える 0