找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1124|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:55:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            Java类反射应用得非常广泛几乎是所有框架的最核心部分,PHP程序员似乎从不关心反射。尝试着用java的思想去理解php的反射,跟java基本上基本一致。参考了php手册:http://www.php.net/manual/zh/book.reflection.php。
ReflectTest.php:
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:
ReflectTest init.
UserId:".$ref->getUserId()."
UserName:".$ref->getUserName()."
Password:".$ref->getPassword();
  $class = new ReflectionClass('ReflectTest');//反射加载ReflectTest类
  $instance = $class->newInstanceArgs(array('123','root','123456'));//ReflectTest初始化

  echo "Field:
";
  $field = $class->getProperties();
  foreach($field as $f) {
    echo $f->getName()."
";//反射输出所有的成员变量
  }

  echo "get Fields DocComment:
";
  foreach($field as $f) {
    $docComment = $f->getDocComment();//反射输出所有成员变量的文档注释
    echo $docComment."
";
  }

  $method = $class->getMethods();//获取ReflectTest所有方法
  echo "get Methods DocComment:
";
  foreach($method as $m) {
    $docComment = $m->getDocComment();//获取所有方法的文档注释
    echo $docComment."
";

  }

  echo "get Methods:
";
  foreach($method as $m) {
    $k = "get";//只调ReflectTest中的所有的get方法
    echo $m->getName()."=".($k === "" || strpos ( $m->getName (), $k ) === 0?$m->invoke($instance):"")."
";
    if("setQq"==$m->getName()){
      $m->invoke($instance,'441637262');//调用setQq方法为ReflectTest当中的成员变量qq设值
    }
  }

  echo "Invoke (set/get)Qq result:
";
  $qq=$class->getmethod('getQq');//获取getQq方法
  echo "getQQ:".$qq->invoke($instance)."
";//获取成员变量qq的值
  echo "jb51.net";
?>
请求http://localhost/php/test/Test.php输出结果:
ReflectTest init.

UserId:1
UserName:admin
Password:admin888
Field:

userId
userName
password
email
qq
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:

getQQ:441637262
jb51.net
            
            
您可能感兴趣的文章:
  • PHP 反射机制实现动态代理的代码
  • 实例介绍PHP的Reflection反射机制
  • PHP的反射类ReflectionClass、ReflectionMethod使用实例
  • PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
  • PHP反射机制用法实例
  • PHP使用反射机制实现查找类和方法的所在位置
  • PHP基于反射机制实现插件的可插拔设计详解
  • 浅谈PHP的反射机制
  • PHP反射机制原理与用法详解
  • PHP的反射机制实例详解
  • PHP基于反射机制实现自动依赖注入的方法详解
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端