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中如何在外部修改类的私有或受保护属性值相关推荐
- php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...
php中怎么在外部修改类的私有或受保护属性值 在做单元测试框架时,发现了个比较郁闷的问题:测试人员需要在类外修改类的private或protected成员变量的值,而这些变量没有抽象成public的属 ...
- python 多线程 类_Python中如何自定义一个多线程类呢?
摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...
- python什么时候用类_python中什么时候使用自定义类
Python中所有的数据都是对象,它提供了许多高级的内建数据类型,功能强大,使用方便,是Python的优点之一.那么什么时候使用自定义类呢? 比如设计一个Person类,如果不使用自定义类,可以这样做 ...
- java.lang包有哪些类_Java中Lang包的工具类有哪些
Java中Lang包的工具类有哪些 发布时间:2020-12-08 16:15:36 来源:亿速云 阅读:76 作者:Leah 今天就跟大家聊聊有关Java中Lang包的工具类有哪些,可能很多人都不太 ...
- java 在一个类中定义类_Java 中程序代码必须在一个类中定义,类使用( )关键字来定义。_学小易找答案...
[填空题]每一个 else 子句都必须和它前面的一个距离它最近的 子句相对应. [单选题]有关类的说法,正确的是( ) [单选题]在JAVA中,无论测试条件是什么,下列( )循环体 将至少执行一次. ...
- 如何在类的外部修改类中的私有数据成员
一般的情况是类中的私有数据成员,只能是类的对象自己可以修改,从外部是不能更改的如下例子 #include<iostream> using namespace std;class Data ...
- java xml 实体类_java中的xml与实体类之间的映射
实体类: package xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User ...
- java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...
[填空题]若在JSP页面的不同作用域中有相同名称的对象,且EL表达式中又省略了相应的作用域类型名,则系统将会按照 . . . 的先后顺序查找相应对象. (20.0分) [简答题]AJAX异步请求过程中 ...
- 类模板中的友元,友元类
一:让类模板的某个实例成为友元. #include <iostream> #include <vector> #include <list> using names ...
最新文章
- yii2 后台权限验证获取用户身份_Yii2搭建后台并实现rbac权限控制完整实例教程...
- 训练三层BP神经网络实现异或运算 Python 代码实现
- linux命令大全增删改查,crudini命令
- BCB6代码格式化外挂
- centos7中yum源安装mysql_centos7下使用yum安装mysql
- Http Module 介绍[转]
- 测试网络稳定性_Redmi Note8 Pro游戏测试,网络稳定性竟比荣耀9X Pro还好?
- 打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。...
- 有关c#.net“无法加载 CSOpenGLC.dll:找不到指定的模块”的问题解决办法
- Web静态服务器-7-gevent版
- 【转载】word空白页删不掉的7种原因及解决方法
- 微信号码检测是什么意思
- sucess - money - freedom
- 开发一个多用户商城系统多少钱
- python批量查询ip归属地_python3.2批量查询IP地址区域
- 计算机网络——网络聊天程序的设计与实现
- Elliptic Labs推出虚拟智能存在检测传感解决方案,为低功耗笔记本电脑的安全性保驾护航
- vue跳转链接(新页签)
- jdbc localhost mysql_JDBC连接MySQL
- C++ Primer Plus第六版第六章编程练习 第4题, 加入Benevolent Order of Programmer后,在BOP大会上
热门文章
- 低配服务器装那个系统吗,用低配服务器好还是高配vps
- pythoncharm下载cpython失败_pycharm虚拟环境下安装mysqlclient失败
- 移植 uC/OS-III 到 STM32
- 30-- A 代码记录分析
- Angular16 Angular整合zTree、异步加载节点数据
- Session,Cookie,jsessionid,Url重写
- 《计算机网络》谢希仁第五版考试重点整理
- 重新ICP,在没有Matlab的日子里
- opencv系列-图像清晰度评价
- linux 多个变量,linux-BASH-使用相同“变量”的多个实例读入...