Test Example of reflection Reflection Mechanism in PHP

  • 2021-07-10 19:10:45
  • OfStack

Java class reflection is so widely used that it is the core part of almost all frameworks, and PHP programmers never seem to care about reflection. Try to understand the reflection of php with the idea of java, which is basically the same as java. Reference was made to the php manual: http://www.php.net/manual/zh/book.reflection.php.

ReflectTest.php:


<?php
 
class ReflectTest {
 
    /**
     *  Users ID
     */
    private $userId;
 
    /**
     *  User name 
     */
    private $userName;
 
    /**
     *  User password 
     */
    private $password;
 
    /**
     *  User mailbox 
     */
    private $email;
 
    /**
     *  Users QQ Number 
     */
    private $qq;
 
    /**
     *  Landing times 
     */
    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");// Instantiation ReflectTest
  echo "<h1>ReflectTest init.</h1><br/>UserId:".$ref->getUserId()."<br/>UserName:".$ref->getUserName()."<br/>Password:".$ref->getPassword();
  $class = new ReflectionClass('ReflectTest');// Reflective loading ReflectTest Class 
  $instance = $class->newInstanceArgs(array('123','root','123456'));//ReflectTest Initialization 
 
  echo "<h1>Field:</h1><br/>";
  $field = $class->getProperties();
  foreach($field as $f) {
    echo $f->getName()."<br/>";// Reflect and output all member variables 
  }
 
  echo "<h1>get Fields DocComment:</h1><br/>";
  foreach($field as $f) {
    $docComment = $f->getDocComment();// Reflect and output document comments for all member variables 
    echo $docComment."<br/>";
  }
 
  $method = $class->getMethods();// Get ReflectTest All methods 
  echo "<h1>get Methods DocComment:</h1><br/>";
  foreach($method as $m) {
    $docComment = $m->getDocComment();// Get documentation comments for all methods 
    echo $docComment."<br/>";
 
  }
 
  echo "<h1>get Methods:</h1><br/>";
  foreach($method as $m) {
    $k = "get";// Tune only ReflectTest All of the get Method 
    echo $m->getName()."=".($k === "" || strpos ( $m->getName (), $k ) === 0?$m->invoke($instance):"")."<br/>";
    if("setQq"==$m->getName()){
      $m->invoke($instance,'441637262');// Call setQq The method is ReflectTest Member variables in the qq Setting value 
    }
  }
 
  echo "<h1>Invoke (set/get)Qq result:</h1><br/>";
  $qq=$class->getmethod('getQq');// Get getQq Method 
  echo "getQQ:".$qq->invoke($instance)."<br/>";// Get member variables qq Value of 
  echo "ofstack.com";
?>

Request http://localhost/php/test/Test. php output result:


ReflectTest init.
 
UserId:1
UserName:admin
Password:admin888
Field:
 
userId
userName
password
email
qq
loginTimes
get Fields DocComment:
 
/** *  Users ID */
/** *  User name  */
/** *  User password  */
/** *  User mailbox  */
/** *  Users QQ Number  */
/** *  Landing times  */
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:
 
getQQ:441637262
ofstack.com


Related articles: