このようなリフレクションを使用して、クラスの他のメソッドからプライベートメソッドを呼び出したい:
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) を使用することは望ましくありません。カプセル化の概念が壊れてしまうからです。
ご清聴ありがとうございました。