当前位置:首页 > PHP教程 > php高级应用 > 列表

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:

  1. <?php 
  2.    
  3. class ReflectTest { 
  4.    
  5.     /** 
  6.      * 用户ID 
  7.      */ 
  8.     private $userId
  9.    
  10.     /** 
  11.      * 用户名 
  12.      */ 
  13.     private $userName
  14.    
  15.     /** 
  16.      * 用户密码 
  17.      */ 
  18.     private $password
  19.    
  20.     /** 
  21.      * 用户邮箱 
  22.      */ 
  23.     private $email
  24.    
  25.     /** 
  26.      * 用户QQ号码 
  27.      */ 
  28.     private $qq
  29.    
  30.     /** 
  31.      * 登陆次数 
  32.      */ 
  33.     private $loginTimes
  34.    
  35.     public function ReflectTest(){ 
  36.    
  37.     } 
  38.    
  39.     public function __construct($userId,$userName,$password){ 
  40.         $this->userId = $userId
  41.         $this->userName = $userName
  42.         $this->password = $password
  43.     } 
  44.    
  45.     /** 
  46.      * 
  47.      * @return the $userId 
  48.      */ 
  49.     public function getUserId() { 
  50.         return $this->userId; 
  51.     } 
  52.    
  53.     /** 
  54.      * 
  55.      * @return the $userName 
  56.      */ 
  57.     public function getUserName() { 
  58.         return $this->userName; 
  59.     } 
  60.    
  61.     /** 
  62.      * 
  63.      * @return the $password 
  64.      */ 
  65.     public function getPassword() { 
  66.         return $this->password; 
  67.     } 
  68.    
  69.     /** 
  70.      * 
  71.      * @return the $email 
  72.      */ 
  73.     public function getEmail() { 
  74.         return $this->email; 
  75.     } 
  76.    
  77.     /** 
  78.      * 
  79.      * @return the $qq 
  80.      */ 
  81.     public function getQq() { 
  82.         return $this->qq; 
  83.     } 
  84.    
  85.     /** 
  86.      * 
  87.      * @return the $loginTimes 
  88.      */ 
  89.     public function getLoginTimes() { 
  90.         return $this->loginTimes; 
  91.     } 
  92.    
  93.     /** 
  94.      * 
  95.      * @param field_type $userId             
  96.      */ 
  97.     public function setUserId($userId) { 
  98.         $this->userId = $userId
  99.     } 
  100.    
  101.     /** 
  102.      * 
  103.      * @param field_type $userName           
  104.      */ 
  105.     public function setUserName($userName) { 
  106.         $this->userName = $userName
  107.     } 
  108.    
  109.     /** 
  110.      * 
  111.      * @param field_type $password           
  112.      */ 
  113.     public function setPassword($password) { 
  114.         $this->password = $password
  115.     } 
  116.    
  117.     /** 
  118.      * 
  119.      * @param field_type $email          
  120.      */ 
  121.     public function setEmail($email) { 
  122.         $this->email = $email
  123.     } 
  124.    
  125.     /** 
  126.      * 
  127.      * @param field_type $qq             
  128.      */ 
  129.     public function setQq($qq) { 
  130.         $this->qq = $qq
  131.     } 
  132.    
  133.     /** 
  134.      * 
  135.      * @param field_type $loginTimes             
  136.      */ 
  137.     public function setLoginTimes($loginTimes) { 
  138.         $this->loginTimes = $loginTimes
  139.     } 
  140. ?> 

Test.php:

  1. <?php 
  2.   require_once 'ReflectTest.php'
  3.   $ref = new ReflectTest("1""admin""admin888");//实例化ReflectTest 
  4.   echo "<h1>ReflectTest init.</h1><br/>UserId:".$ref->getUserId()."<br/>UserName:".$ref->getUserName()."<br/>Password:".$ref->getPassword(); 
  5.   $class = new ReflectionClass('ReflectTest');//反射加载ReflectTest类 
  6.   $instance = $class->newInstanceArgs(array('123','root','123456'));//ReflectTest初始化 
  7.    
  8.   echo "<h1>Field:</h1><br/>"
  9.   $field = $class->getProperties(); 
  10.   foreach($field as $f) { 
  11.     echo $f->getName()."<br/>";//反射输出所有的成员变量 
  12.   } 
  13.    
  14.   echo "<h1>get Fields DocComment:</h1><br/>"
  15.   foreach($field as $f) { 
  16.     $docComment = $f->getDocComment();//反射输出所有成员变量的文档注释 
  17.     echo $docComment."<br/>"
  18.   } 
  19.    
  20.   $method = $class->getMethods();//获取ReflectTest所有方法 
  21.   echo "<h1>get Methods DocComment:</h1><br/>"
  22.   foreach($method as $m) { 
  23.     $docComment = $m->getDocComment();//获取所有方法的文档注释 
  24.     echo $docComment."<br/>"
  25.    
  26.   } 
  27.    
  28.   echo "<h1>get Methods:</h1><br/>"
  29.   foreach($method as $m) { 
  30.     $k = "get";//只调ReflectTest中的所有的get方法 
  31.     echo $m->getName()."=".($k === "" || strpos ( $m->getName (), $k ) === 0?$m->invoke($instance):"")."<br/>"
  32.     if("setQq"==$m->getName()){ 
  33.       $m->invoke($instance,'441637262');//调用setQq方法为ReflectTest当中的成员变量qq设值 
  34.     } 
  35.   } 
  36.    
  37.   echo "<h1>Invoke (set/get)Qq result:</h1><br/>"
  38.   $qq=$class->getmethod('getQq');//获取getQq方法 
  39.   echo "getQQ:".$qq->invoke($instance)."<br/>";//获取成员变量qq的值 
  40.   echo "www.phpfensi.com"
  41. ?> 

请求http://localhost/php/test/Test.php输出结果:

  1. ReflectTest init. 
  2.    
  3. UserId:1 
  4. UserName:admin 
  5. Password:admin888 
  6. Field: 
  7.    
  8. userId 
  9. userName 
  10. password 
  11. email 
  12. qq 
  13. loginTimes 

get Fields DocComment:

  1. /** * 用户ID */ 
  2. /** * 用户名 */ 
  3. /** * 用户密码 */ 
  4. /** * 用户邮箱 */ 
  5. /** * 用户QQ号码 */ 
  6. /** * 登陆次数 */ 
  7. get Methods DocComment: 
  8.    
  9. /** * * @return the $userId */ 
  10. /** * * @return the $userName */ 
  11. /** * * @return the $password */ 
  12. /** * * @return the $email */ 
  13. /** * * @return the $qq */ 
  14. /** * * @return the $loginTimes */ 
  15. /** * * @param field_type $userId */ 
  16. /** * * @param field_type $userName */ 
  17. /** * * @param field_type $password */ 
  18. /** * * @param field_type $email */ 
  19. /** * * @param field_type $qq */ 
  20. /** * * @param field_type $loginTimes */ 
  21. get Methods: 
  22.    
  23. ReflectTest= 
  24. __construct= 
  25. getUserId=123 
  26. getUserName=root 
  27. getPassword=123456 
  28. getEmail= 
  29. getQq= 
  30. getLoginTimes= 
  31. setUserId= 
  32. setUserName= 
  33. setPassword= 
  34. setEmail= 
  35. setQq= 
  36. setLoginTimes= 
  37. Invoke (set/get)Qq result: 

Tags: reflection PHP反射机制

分享到: