我想使用反射从其他类方法调用私有方法,如下所示:
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) 也是不可取的,因为它破坏了封装概念。
感谢您的关注。