Cha*_*son 6 php access-modifiers
我有一个非常特殊的情况,我需要从类外部调用受保护的方法.我非常清楚我的编程方式,但我不会完全反对我这样做的一个特例.在所有其他情况下,我需要继续禁止访问内部方法,因此我希望保护该方法.
在课堂外访问受保护方法的一些优雅方法是什么?到目前为止,我已经找到了这个.
我想有可能创建某种目标类的双代理实例,它会偷偷地提供对内部的访问......
小智 5
在PHP中,您可以使用Reflections执行此操作.要调用protected或private方法,请使用setAccessible()方法 http://php.net/reflectionmethod.setaccessible(只需将其设置为TRUE)
我只是把它扔在那里,因为我已经两年没有用 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 也不允许你这样做。看来您将不得不使用某种儿童课程,就像其他海报所建议的那样。如果您发现一种有效的方法,开发人员将来可能会将其归类为错误,并在您升级到下一个版本时破坏您的代码。
我建议延长课程时间。