PHP中的reflection反射机制测试例子
发布:smiling 来源: PHP粉丝网 添加日期:2021-03-29 14:13:12 浏览: 评论:0
这篇文章主要介绍了PHP中的reflection反射机制测试例子,从本文可以学到一些反射的使用方法,需要的朋友可以参考下。
Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php。
ReflectTest.php:
- <?php
 - 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->qq;
 - }
 - /**
 - *
 - * @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:
- <?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 "www.phpfensi.com";
 - ?>
 
请求http://localhost/php/test/Test.php输出结果:
- ReflectTest init.
 - UserId:1
 - UserName:admin
 - Password:admin888
 - Field:
 - userId
 - userName
 - password
 - loginTimes
 
get 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=123
 - getUserName=root
 - getPassword=123456
 - getEmail=
 - getQq=
 - getLoginTimes=
 - setUserId=
 - setUserName=
 - setPassword=
 - setEmail=
 - setQq=
 - setLoginTimes=
 - Invoke (set/get)Qq result:
 
Tags: reflection PHP反射机制
相关文章
- ·实例介绍PHP的Reflection反射机制(2021-03-28)
 - ·PHP的反射类ReflectionClass、ReflectionMethod使用实例(2021-03-28)
 - ·PHP 反射(Reflection)使用实例(2021-05-26)
 - ·PHP反射机制用法实例(2021-04-10)
 - ·PHP基于反射机制实现自动依赖注入的方法详解(2021-08-22)
 - ·使用PHP反射机制来构造"CREATE TABLE"的sql语句(2021-11-13)
 
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
 - PHP新手上路(一)(7)
 - 惹恼程序员的十件事(5)
 - PHP邮件发送例子,已测试成功(5)
 - 致初学者:PHP比ASP优秀的七个理由(4)
 - PHP会被淘汰吗?(4)
 - PHP新手上路(四)(4)
 - 如何去学习PHP?(2)
 - 简单入门级php分页代码(2)
 - php中邮箱email 电话等格式的验证(2)
 
