在PHP中从类外部调用受保护的方法

Cha*_*son 6 php access-modifiers

我有一个非常特殊的情况,我需要从类外部调用受保护的方法.我非常清楚我的编程方式,但我不会完全反对我这样做的一个特例.在所有其他情况下,我需要继续禁止访问内部方法,因此我希望保护该方法.

在课堂外访问受保护方法的一些优雅方法是什么?到目前为止,我已经找到了这个.

我想有可能创建某种目标类的双代理实例,它会偷偷地提供对内部的访问......

小智 5

在PHP中,您可以使用Reflections执行此操作.要调用protected或private方法,请使用setAccessible()方法 http://php.net/reflectionmethod.setaccessible(只需将其设置为TRUE)


Dav*_*e L 0

我只是把它扔在那里,因为我已经两年没有用 PHP 编程了。您可以像这样向调用受保护方法的类添加一个函数吗?

$obj->publicFunc = create_function('$arg', 'return $this->protectedFunc($arg);');
Run Code Online (Sandbox Code Playgroud)

编辑我认为汤姆查看 create_function 的文档是正确的。当您尝试使用此示例调用 $this 时,它的范围似乎会“错误”。


看起来从 PHP 5.3.0 开始也支持传统的匿名函数(我的第一个解决方案可能行不通),所以我可能会这样写:

$obj->publicFunc = function($arg) { 
     return $this->protectedFunc($arg); 
};
Run Code Online (Sandbox Code Playgroud)

因为我认为它看起来更干净(当然,您选择的 IDE 会更好地突出它)。


呃,我尝试使用反射来调用该方法,但 PHP 也不允许你这样做。看来您将不得不使用某种儿童课程,就像其他海报所建议的那样。如果您发现一种有效的方法,开发人员将来可能会将其归类为错误,并在您升级到下一个版本时破坏您的代码。

我建议延长课程时间。