首页 > 编程 > PHP > 正文

PHP中的reflection反射机制测试例子

2020-03-22 16:26:05
字体:
来源:转载
供稿:网友
Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php。ReflectTest.php:html' target='_blank'>class ReflectTest {/*** 用户ID*/private $userId;/*** 用户名*/private $userName;/*** 用户密码*/private $password;/*** 用户邮箱*/private $email;/*** 用户QQ号码*/private $qq;/*** 登陆次数*/private $loginTimes;public function ReflectTest(){}public function __construct($userId,$userName,$password){$this- userId = $userId;$this- userName = $userName;$this- password = $password;}/**** @return the $userId*/public function getUserId() {return $this- userId;}/**** @return the $userName*/public function getUserName() {return $this- userName;}/**** @return the $password*/public function getPassword() {return $this- password;}/**** @return the $email*/public function getEmail() {return $this- email;}/**** @return the $qq*/public function getQq() {return $this- }/**** @return the $loginTimes*/public function getLoginTimes() {return $this- loginTimes;}/**** @param field_type $userId */public function setUserId($userId) {$this- userId = $userId;}/**** @param field_type $userName */public function setUserName($userName) {$this- userName = $userName;}/**** @param field_type $password */public function setPassword($password) {$this- password = $password;}/**** @param field_type $email */public function setEmail($email) {$this- email = $email;}/**** @param field_type $qq */public function setQq($qq) {$this- qq = $qq;}/**** @param field_type $loginTimes */public function setLoginTimes($loginTimes) {$this- loginTimes = $loginTimes;} Test.php: require_once 'ReflectTest.php'; $ref = new ReflectTest("1", "admin", "admin888");//实例化ReflectTest echo " h1 ReflectTest init. /h1 br/ UserId:".$ref- getUserId()." br/ UserName:".$ref- getUserName()." br/ Password:".$ref- getPassword(); $class = new ReflectionClass('ReflectTest');//反射加载ReflectTest类 $instance = $class- newInstanceArgs(array('123','root','123456'));//ReflectTest初始化 echo " h1 Field: /h1 br/ $field = $class- getProperties(); foreach($field as $f) { echo $f- getName()." br/ //反射输出所有的成员变量 echo " h1 get Fields DocComment: /h1 br/ foreach($field as $f) { $docComment = $f- getDocComment();//反射输出所有成员变量的文档注释 echo $docComment." br/ $method = $class- getMethods();//获取ReflectTest所有方法 echo " h1 get Methods DocComment: /h1 br/ foreach($method as $m) { $docComment = $m- getDocComment();//获取所有方法的文档注释 echo $docComment." br/ echo " h1 get Methods: /h1 br/ foreach($method as $m) { $k = "get";//只调ReflectTest中的所有的get方法 echo $m- getName()."=".($k === "" || strpos ( $m- getName (), $k ) === 0 $m- invoke($instance):"")." br/ if("setQq"==$m- getName()){ $m- invoke($instance,'441637262');//调用setQq方法为ReflectTest当中的成员变量qq设值 echo " h1 Invoke (set/get)Qq result: /h1 br/ $qq=$class- getmethod('getQq');//获取getQq方法 echo "getQQ:".$qq- invoke($instance)." br/ //获取成员变量qq的值 echo "phpstudy.net"; 请求http://localhost/php/test/Test.php输出结果:ReflectTest init.UserId:1UserName:adminPassword:admin888Field:userIduserNamepasswordemailloginTimesget Fields DocComment:/** * 用户ID *//** * 用户名 *//** * 用户密码 *//** * 用户邮箱 *//** * 用户QQ号码 *//** * 登陆次数 */get Methods DocComment:/** * * @return the $userId *//** * * @return the $userName *//** * * @return the $password *//** * * @return the $email *//** * * @return the $qq *//** * * @return the $loginTimes *//** * * @param field_type $userId *//** * * @param field_type $userName *//** * * @param field_type $password *//** * * @param field_type $email *//** * * @param field_type $qq *//** * * @param field_type $loginTimes */get Methods:ReflectTest=__construct=getUserId=123getUserName=rootgetPassword=123456getEmail=getQq=getLoginTimes=setUserId=setUserName=setPassword=setEmail=setQq=setLoginTimes=Invoke (set/get)Qq result:getQQ:441637262phpstudy.netPHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表