php 受保护类,php中如何在外部修改类的私有或受保护属性值
php中怎么在外部修改類的私有或受保護屬性值
在做單元測試框架時,發現了個比較郁悶的問題:測試人員需要在類外修改類的private或protected成員變量的值,而這些變量沒有抽象成public的屬性,同時為了代碼量的問題,也不可能修改要測試的類。怎么在類外修改類的私有變量呢?請看下面的關鍵代碼:
類文件sellAction.php, 內容如下:
cUid;echo "
";echo "output private id :".$this->id;echo "
";echo "output public pId:".$this->pId;echo "
";}}
測試文件test.php,內容如下:
$val) { $pro = $reflectCls->getProperty($key);if($pro && ($pro->isPrivate() || $pro->isProtected())){$pro->setAccessible(true);$pro->setValue($reference, $val);}else{$reference->$key = $val;} } return true;}$act = new SellAction();echo "not set private protect public var";echo "
";var_dump($act);$act->output();$attr = array('cUid'=>'234556', 'pId'=>'987676757', 'id'=> '782100');initReferenceAttr($act, $attr);echo "
";print_r($attr);echo "
";echo "
";echo "set private protect public var ";echo "
";var_dump($act);echo "
";$act->output();
在瀏覽器中,直接瀏覽test.php,內容大致如下:
not set private protect public varobject(SellAction)#1 (3) { ["cUid":protected]=> NULL ["id":"SellAction":private]=> NULL ["pId"]=> NULL } output protected cUid :output private id :output public pId:Array ( [cUid] => 234556 [pId] => 987676757 [id] => 782100 ) set private protect public var object(SellAction)#1 (3) { ["cUid":protected]=> string(6) "234556" ["id":"SellAction":private]=> string(6) "782100" ["pId"]=> string(9) "987676757" } output protected cUid :234556output private id :782100output public pId:987676757
上面的demo主要是通過反射實現該功能。反射功能需要php版本>=5.3,反射的相關信息請參閱:http://php.net/manual/en/book.reflection.php
相關文章
相關視頻
總結
以上是生活随笔為你收集整理的php 受保护类,php中如何在外部修改类的私有或受保护属性值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果动画电影《男孩、鼹鼠、狐狸和马》获得
- 下一篇: 推特裁员后,马斯克突然要给员工发“奖金”