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中如何在外部修改类的私有或受保护属性值相关推荐

  1. php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...

    php中怎么在外部修改类的私有或受保护属性值 在做单元测试框架时,发现了个比较郁闷的问题:测试人员需要在类外修改类的private或protected成员变量的值,而这些变量没有抽象成public的属 ...

  2. python 多线程 类_Python中如何自定义一个多线程类呢?

    摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...

  3. python什么时候用类_python中什么时候使用自定义类

    Python中所有的数据都是对象,它提供了许多高级的内建数据类型,功能强大,使用方便,是Python的优点之一.那么什么时候使用自定义类呢? 比如设计一个Person类,如果不使用自定义类,可以这样做 ...

  4. java.lang包有哪些类_Java中Lang包的工具类有哪些

    Java中Lang包的工具类有哪些 发布时间:2020-12-08 16:15:36 来源:亿速云 阅读:76 作者:Leah 今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太 ...

  5. java 在一个类中定义类_Java 中程序代码必须在一个类中定义,类使用( )关键字来定义。_学小易找答案...

    [填空题]每一个 else 子句都必须和它前面的一个距离它最近的 子句相对应. [单选题]有关类的说法,正确的是( ) [单选题]在JAVA中,无论测试条件是什么,下列( )循环体 将至少执行一次. ...

  6. 如何在类的外部修改类中的私有数据成员

    一般的情况是类中的私有数据成员,只能是类的对象自己可以修改,从外部是不能更改的如下例子 #include<iostream> using namespace std;class Data ...

  7. java xml 实体类_java中的xml与实体类之间的映射

    实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...

  8. java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...

    [填空题]若在JSP页面的不同作用域中有相同名称的对象,且EL表达式中又省略了相应的作用域类型名,则系统将会按照 . . . 的先后顺序查找相应对象. (20.0分) [简答题]AJAX异步请求过程中 ...

  9. 类模板中的友元,友元类

    一:让类模板的某个实例成为友元. #include <iostream> #include <vector> #include <list> using names ...

最新文章

  1. yii2 后台权限验证获取用户身份_Yii2搭建后台并实现rbac权限控制完整实例教程...
  2. 训练三层BP神经网络实现异或运算 Python 代码实现
  3. linux命令大全增删改查,crudini命令
  4. BCB6代码格式化外挂
  5. centos7中yum源安装mysql_centos7下使用yum安装mysql
  6. Http Module 介绍[转]
  7. 测试网络稳定性_Redmi Note8 Pro游戏测试,网络稳定性竟比荣耀9X Pro还好?
  8. 打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。...
  9. 有关c#.net“无法加载 CSOpenGLC.dll:找不到指定的模块”的问题解决办法
  10. Web静态服务器-7-gevent版
  11. 【转载】word空白页删不掉的7种原因及解决方法
  12. 微信号码检测是什么意思
  13. sucess - money - freedom
  14. 开发一个多用户商城系统多少钱
  15. python批量查询ip归属地_python3.2批量查询IP地址区域
  16. 计算机网络——网络聊天程序的设计与实现
  17. Elliptic Labs推出虚拟智能存在检测传感解决方案,为低功耗笔记本电脑的安全性保驾护航
  18. vue跳转链接(新页签)
  19. jdbc localhost mysql_JDBC连接MySQL
  20. C++ Primer Plus第六版第六章编程练习 第4题, 加入Benevolent Order of Programmer后,在BOP大会上

热门文章

  1. 低配服务器装那个系统吗,用低配服务器好还是高配vps
  2. pythoncharm下载cpython失败_pycharm虚拟环境下安装mysqlclient失败
  3. 移植 uC/OS-III 到 STM32
  4. 30-- A 代码记录分析
  5. Angular16 Angular整合zTree、异步加载节点数据
  6. Session,Cookie,jsessionid,Url重写
  7. 《计算机网络》谢希仁第五版考试重点整理
  8. 重新ICP,在没有Matlab的日子里
  9. opencv系列-图像清晰度评价
  10. linux 多个变量,linux-BASH-使用相同“变量”的多个实例读入...