PHP反射学习入门示例

 更新时间:2019-06-25 06:01:09   作者:佚名   我要评论(0)

本文实例讲述了PHP反射。分享给大家供大家参考,具体如下:
今天开始学习php 的反射,许多人可能还没有听说过反射这个概念,简单点说反射的就是让你拥有剖析类

本文实例讲述了PHP反射。分享给大家供大家参考,具体如下:

今天开始学习php 的反射,许多人可能还没有听说过反射这个概念,简单点说反射的就是让你拥有剖析类、函数的能力。

有的同学可能会问我剖析类有什么用,我为什么要学反射,我只能说不学反射并不会对你实现业务有任何影响,但是如果你想写出结构优雅的程序,想写出维护性和扩展性都很高的程序,学习反射是必不可少的。

PHP 内置了一组反射类来实现类的反射,常用的有:

  • ReflectionClass 解析类
  • ReflectionProperty 类的属性的相关信息
  • ReflectionMethod 类方法的有关信息
  • ReflectionParameter 取回了函数或方法参数的相关信息

想看全的就翻手册去。

今天先通过一段演示代码简单看下php的反射到底是个什么东西。

<?php
class Hero {
  protected $name;
  protected $skills = [];
  public function __construct($name, $skills = []) {
    $this->name = $name;
    $this->skills = $skills;
  }
  public function attack($hero) {
    echo "Attack {$hero->name}" . PHP_EOL;
  }
  public function execute($index) {
    echo "Axecute {$index} skill" . PHP_EOL;
  }
}
$ref = new ReflectionClass('Hero');
if ($ref->isInstantiable()) {
  echo '可以实例化' . PHP_EOL;
}
// 获取类的构造函数
$constructor = $ref->getConstructor();
print_r($constructor); //ReflectionMethod E对象
//获取属性
if ($ref->hasProperty('name')) {
  $attr = $ref->getProperty('name');
  print_r($attr); //ReflectionProperty 对象
}
// 获取属性列表
$attributes = $ref->getProperties();
foreach ($attributes as $row) {
  //row 为 ReflectionProperty 的实例
  echo $row->getName() . "\n";
}
// 获取方法
if ($ref->hasMethod('attack')) {
  $method = $ref->getMethod('attack');
  //$method 为 ReflectionMethod 的实例
  print_r($method);
}
// 获取方法列表
$methods = $ref->getMethods();
foreach ($methods as $row) {
  //这的row 是 ReflectionMethod 的实例
  echo $row->getName() . PHP_EOL;
}

运行结果:

可以实例化
ReflectionMethod Object
(
    [name] => __construct
    [class] => Hero
)
ReflectionProperty Object
(
    [name] => name
    [class] => Hero
)
name
skills
ReflectionMethod Object
(
    [name] => attack
    [class] => Hero
)
__construct
attack
execute

学习新东西,首先是要有熟悉感,或者叫手感,有了手感你才会对它不畏惧,先把上面的代码抄上一篇,运行一下,你应该会对php 反射有一点初步的印象。

下一篇再做一个小例子,看看用发可以做什么神奇的事情。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:

  • 浅析PHP类的反射来实现依赖注入过程
  • PHP基于反射机制实现自动依赖注入的方法详解
  • php反射学习之不用new方法实例化类操作示例
  • PHP的反射类ReflectionClass、ReflectionMethod使用实例
  • PHP反射类ReflectionClass和ReflectionObject的使用方法
  • PHP反射机制原理与用法详解
  • PHP反射使用实例和PHP反射API的中文说明
  • PHP 反射机制实现动态代理的代码
  • PHP反射机制用法实例
  • 理解php依赖注入和控制反转
  • php反射学习之依赖注入示例

相关文章

  • PHP反射学习入门示例

    PHP反射学习入门示例

    本文实例讲述了PHP反射。分享给大家供大家参考,具体如下: 今天开始学习php 的反射,许多人可能还没有听说过反射这个概念,简单点说反射的就是让你拥有剖析类
    2019-06-25
  • PHP 并发场景的几种解决方案

    PHP 并发场景的几种解决方案

    在秒杀,抢购等并发场景下,可能会出现超卖的现象,在PHP语言中并没有原生提供并发的解决方案,因此就需要借助其他方式来实现并发控制。 列出常见的解决方
    2019-06-25
  • php反射学习之不用new方法实例化类操作示例

    php反射学习之不用new方法实例化类操作示例

    本文实例讲述了php反射学习之不用new方法实例化类操作。分享给大家供大家参考,具体如下: 上一篇php反射入门示例简单介绍了 php 反射的几个常见类的使用方法
    2019-06-25
  • PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例

    PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例

    本文实例讲述了PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类。分享给大家供大家参考,具体如下: class AutoImage{ private $image; pu
    2019-06-25
  • php反射学习之依赖注入示例

    php反射学习之依赖注入示例

    本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下: 先看代码: <&#63;php if (PHP_SAPI != 'cli') { exit('Please run it in term
    2019-06-25
  • php自定义排序uasort函数示例【二维数组按指定键值排序】

    php自定义排序uasort函数示例【二维数组按指定键值排序】

    本文实例讲述了php自定义排序uasort函数。分享给大家供大家参考,具体如下: 项目需要风险排序,按 I(安全)<L(低风险)<M(中风险)<H(高风险) 的级别来排序 由于
    2019-06-25
  • php设计模式之策略模式应用案例详解

    php设计模式之策略模式应用案例详解

    本文实例讲述了php设计模式之策略模式应用。分享给大家供大家参考,具体如下: 策略模式 定义: 策略模式定义一系列的算法,将每个算法封装起来,并让它们可以
    2019-06-25
  • PHP 实现文件压缩解压操作的方法

    PHP 实现文件压缩解压操作的方法

    在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作 在PH
    2019-06-25
  • php设计模式之装饰模式应用案例详解

    php设计模式之装饰模式应用案例详解

    本文实例讲述了php设计模式之装饰模式。分享给大家供大家参考,具体如下: 介绍 装饰者模式(Decorator Pattern)允许你向一个现有的对象添加新的功能,同
    2019-06-25
  • yii2 在控制器中验证请求参数的使用方法

    yii2 在控制器中验证请求参数的使用方法

    写api接口时一般会在控制器中简单验证参数的正确性。 使用yii只带验证器(因为比较熟悉)实现有两种方式(效果都不佳)。 针对每个请求单独写个 Model , 定义
    2019-06-25

最新评论