zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Django的model form
    Django之验证码
    ajax获取跨域数据
    js+css模仿打字效果
    CSS自定义消息提示
    CSS画各种二维图形
    最简单的动态进度条
    利用javascript(自定义事件)记录尺寸可变元素的尺寸变化过程
    超级简单的利用javascript实现文件拖拽事件
    javascript 公历与农历相互转换工具类
  • 原文地址:https://www.cnblogs.com/zhuchenglin/p/8890451.html
Copyright © 2011-2022 走看看