• PHP 反射的简单使用


    反射机制简介

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

    反射机制的使用

    1. 常用的类

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

      worker.php:

      <?php
      
       class Worker{
          //工人的一些属性
          private $name_;
      	 private $age_;
          private $salary_;
      
          //构造方法
          public function __construct($name,$age,$salary){
              $this->name_ = $name;
              $this->age_ = $age;
              $this->salary_ = $salary;
          }
          //输出工人信息的方法
          public function show(){
              echo "年龄".$this->salary_;
              echo "姓名".$this->name_;
              echo "工资".$this->salary_;
          }
      
          //__toString方法
          public function __toString(){
              return "年龄:".$this->age.",姓名:".$this->name."工资:".$this->salary;
          }
      
      }		
      

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

      <?php
      	include 'worker.php';
      	//通过类名获取
      	$workClass_by_classname = new ReflectionClass('Worker');
      	
      	//通过类的实例对象获取
      	$w = new Worker("小明",20,20);
      	$workerClass_by_classinstance = new ReflectionObject($w);
      	
      	//因为ReflectionObject是ReflectionClass的子类,所以workClass_by_classname的方法,workerClass_by_classinstance同样适用
      	//下面利用workClass_by_classname对象获取类的一些属性
      	//获取类名
      	echo $workClass_by_classname->getName();
      	//获取类的方法列表
      	var_dump($workClass_by_classname->getMethods());
      	//获取类的属性
      	var_dump($workClass_by_classname->getProperties());
      	
      	//利用反射得到方法,并执行该方法
      	$worker = $workClass_by_classname->newInstance("小明",20,20);
      	$show_method = new ReflectionMethod('Worker','show');
      	$show_method->invoke($worker);
      	
      	//利用反射机制得到属性,并设置值
      	$property = $workClass_by_classname->getProperty('name_');
      	$property->setAccessible(true);
      	var_dump($property->getValue($worker));
      
      	$property->setValue($worker ,'小红');
      	var_dump($property->getValue($worker));
      		
      

      除了这些外,PHP反射还有其他的功能,具体可参考PHP手册的反射部分
      如需转载请注明出处:http://www.cnblogs.com/zhuchenglin/p/8890451.html

  • 相关阅读:
    Day03 小程序代码构成 -------4月19日
    Day02 申请账号和下载微信开发者工具------4月19日
    Day01《起步》 --- 4月19日
    记录EFCORE命令行操作数据库的方式
    关于Angular+ngx-perfect-scrollbar自定义各大浏览器滚动条样式的解决方法
    Angular里使用(image-compressor.js)图片压缩
    moment的简单使用方式
    关于Npoi+excel文件读取,修改文件内容的处理方式
    记录sql中统计近五天数据的口径(While+IF)
    Angular中ngx-image-cropper图片裁剪的使用
  • 原文地址:https://www.cnblogs.com/zhuchenglin/p/8890451.html
Copyright © 2020-2023  润新知