PHP反射学习入门示例

 更新时间:2019年06月14日 10:47:12   作者:ltx06  
这篇文章主要介绍了PHP反射,简单描述了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设计模式之中介者模式,中介者模式(Mediator Pattern)是一种常用的设计模式,用于解决各个对象之间的复杂依赖关系,使得各个对象之间可以独立地改变自己的行为,而不需要与其他对象发生直接的交互
    2023-04-04
  • php 远程图片保存到本地的函数类

    php 远程图片保存到本地的函数类

    获取远程图片并把它保存到本地
    2008-12-12
  • PHP试题之RCEService正则回溯解答

    PHP试题之RCEService正则回溯解答

    这篇文章主要为大家介绍了PHP试题之RCEService正则回溯解答,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • PHP实现的Redis操作通用类示例

    PHP实现的Redis操作通用类示例

    这篇文章主要介绍了PHP实现的Redis操作通用类,结合实例形式分析了php实现的redis连接、队列、集合、hash表、事务等相关操作封装技巧,需要的朋友可以参考下
    2018-06-06
  • PHP的array_diff()函数在处理大数组时的效率问题

    PHP的array_diff()函数在处理大数组时的效率问题

    PHP 5.2.6 以上版本的 array_diff() 函数在处理大数组时,需要花费超长时间,这个 bug 已经被官方确认;在这个问题被修复之前或者在我们不能控制 PHP 版本的时候,可以使用本文提供的方法
    2011-11-11
  • php自定义排序uasort函数示例【二维数组按指定键值排序】

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

    这篇文章主要介绍了php自定义排序uasort函数,结合实例形式分析了php实现二维数组按指定键值排序的相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • php实现基于openssl的加密解密方法

    php实现基于openssl的加密解密方法

    这篇文章主要介绍了php实现基于openssl的加密解密方法,结合实例形式分析了php自定义函数实现基于openssl的加密解密操作相关技巧,需要的朋友可以参考下
    2016-09-09
  • PHP SPL使用方法和他的威力

    PHP SPL使用方法和他的威力

    什么是SPL,如何使用,他有什么作用,下面我我们就讲讲PHP SPL的用法
    2013-11-11
  • mcrypt启用 加密以及解密过程详细解析

    mcrypt启用 加密以及解密过程详细解析

    Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示
    2013-08-08
  • PHP操作Redis数据库常用方法示例

    PHP操作Redis数据库常用方法示例

    这篇文章主要介绍了PHP操作Redis数据库常用方法,结合实例形式总结分析了php针对redis数据库连接、字符串、列表、hash字典、set集合等数据类型相关操作技巧,需要的朋友可以参考下
    2018-08-08

最新评论