脚本宝典收集整理的这篇文章主要介绍了更改PHP类函数的隐私范围,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
由于函数的命名约定足够紧凑,有没有办法将现有函数更改为public(不需要相同的类,或临时扩展),或者我必须使用PHP的新特征功能来添加一个现有的类,它包含作为内部受保护函数的抽象层的函数的公共版本?
编辑:
abstract class ORMClass { public function __construct($pk) {} PRotected function __get($k) {} protected function __set($k,$v) {} protected function save() {} } trait publicORM { public function __get($k) { return parent::__get($k); } public function __set($k,$v) { return parent::__set($k,$v); } public function save() { return parent::save(); } } class myOrm extends ORMClass { use publicORM; protected static $table = 'myTable'; }
所以我可以使用MyOrm:
$myOrm = new myOrm(1); $myOrm->foo = 'alice' echo $myOrm->bar; $myOrm->save();
不需要:
public function __get($k) { return parent::__get($k); } public function __set($k,$v); } public function save() { return parent::save(); }
要在类myOrm中列出
这可以使用PHP的Reflection库来完成,该库自版本5开始内置于PHP.这个特殊的方法非常简单:
<?PHP abstract class BaseClass { protected function testMe() { echo 'I WORK!'; } } class concreteClass extends BaseClass { // Class Code } $method = new ReflectionMethod('BaseClass','testMe'); $method->setAccessible(true); $method->invoke(new ConcreteClass()); // Prints 'I WORK!'
<?PHP abstract class BaseClass { protected function testMe() { echo 'I WORK!'; } } abstract class PublicBaseClass extends BaseClass { public function testMe() { parent::testMe(); } } class ConcreteClass extends PublicBaseClass { // Class Code } $obj = new ConcreteClass(); $obj->testMe();
以上是脚本宝典为你收集整理的更改PHP类函数的隐私范围全部内容,希望文章能够帮你解决更改PHP类函数的隐私范围所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。