分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

PHP 反射的简单使用

发布时间:2023-09-06 01:50责任编辑:苏小强关键词: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

PHP 反射的简单使用

原文地址:https://www.cnblogs.com/zhuchenglin/p/8890451.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved