• PHP 反射的简单使用


    反射机制简介

    1. 之前已经介绍过Java反射机制的简单使用,所有的反射机制的思想作用等都是类似的,下面就一起来了解一下PHP反射机制。
    2. 个人理解:反射机制就是可以利用类名或者一个类的对象来获取关于这个类的一系列信息(类的变量,方法),然后又就可以利用得到的类的信息实例化一些类的对象
    3. 官方给的简介:反射 API,有 对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。
    4. 一般在框架中使用到反射机制比较多(控制反转),正常情况下一般使用不到反射的

    反射机制的使用

    1. 常用的类
      1. ReflectionClass 通过类名获取类的信息
      2. ReflectionObject 通过类的对象获取类的信息
    2. 代码,还以之前介绍Java反射的Worker类为例

      worker.php:

       1 <?php
       2 
       3  class Worker{
       4     //工人的一些属性
       5     private $name_;
       6      private $age_;
       7     private $salary_;
       8 
       9     //构造方法
      10     public function __construct($name,$age,$salary){
      11         $this->name_ = $name;
      12         $this->age_ = $age;
      13         $this->salary_ = $salary;
      14     }
      15     //输出工人信息的方法
      16     public function show(){
      17         echo "年龄".$this->salary_;
      18         echo "姓名".$this->name_;
      19         echo "工资".$this->salary_;
      20     }
      21 
      22     //__toString方法
      23     public function __toString(){
      24         return "年龄:".$this->age.",姓名:".$this->name."工资:".$this->salary;
      25     }
      26 
      27 }  

      下面可以通过反射机制获取类的信息
      注 getObjectOfRuntimeClass.php 该文件和worker.php 在一个文件夹下

       1 <?php
       2     include 'worker.php';
       3     //通过类名获取
       4     $workClass_by_classname = new ReflectionClass('Worker');
       5 
       6     //通过类的实例对象获取
       7     $w = new Worker("小明",20,20);
       8     $workerClass_by_classinstance = new ReflectionObject($w);
       9 
      10     //因为ReflectionObject是ReflectionClass的子类,所以workClass_by_classname的方法,workerClass_by_classinstance同样适用
      11     //下面利用workClass_by_classname对象获取类的一些属性
      12     //获取类名
      13     echo $workClass_by_classname->getName();
      14     //获取类的方法列表
      15     var_dump($workClass_by_classname->getMethods());
      16     //获取类的属性
      17     var_dump($workClass_by_classname->getProperties());
      18 
      19     //利用反射得到方法,并执行该方法
      20     $worker = $workClass_by_classname->newInstance("小明",20,20);
      21     $show_method = new ReflectionMethod('Worker','show');
      22     $show_method->invoke($worker);
      23 
      24     //利用反射机制得到属性,并设置值
      25     $property = $workClass_by_classname->getProperty('name_');
      26     $property->setAccessible(true);
      27     var_dump($property->getValue($worker));
      28 
      29     $property->setValue($worker ,'小红');
      30     var_dump($property->getValue($worker));

      除了这些外,PHP反射还有其他的功能,具体可参考PHP手册的反射部分

    转自:http://www.cnblogs.com/zhuchenglin/p/8890451.html

  • 相关阅读:
    [视频教程] 如何在docker环境下的纯净ubuntu系统中安装最新版nginx
    [视频教程] 如何在Linux深度系统deepin下安装docker
    某业务自助开通账户问题排查
    将博客搬至CSDN
    某业务付费统计脚本问题排查
    [PHP] 存储改造中的逻辑和清理遗留的问题
    [PHP] 运维新增服务器导致的附件上传失败问题
    [PHP] 近期接手現有的企邮前端框架业务所遇困难
    [Linux] 编写Dockerfile文件自动构建镜像
    [PHP] 持续交付Jenkins安装
  • 原文地址:https://www.cnblogs.com/sevensd/p/9479928.html
Copyright © 2020-2023  润新知