php提供实现反射的方法和实例代码


Posted in PHP onSeptember 17, 2019

就算是类成员定义为private也可以在外部访问,不用创建类的实例也可以访问类的成员和方法。

PHP自5.0版本以后添加了反射机制,它提供了一套强大的反射API,允许你在PHP运行环境中,访问和使用类、方法、属性、参数和注释等,其功能十分强大,经常用于高扩展的PHP框架,自动加载插件,自动生成文档,甚至可以用来扩展PHP语言

由于它是PHP?冉ǖ?op扩展,为语言本身自带的特性,所以不需要额外添加扩展或者配置就可以使用。

PHP反射API会基于类,方法,属性,参数等维护相应的反射类,已提供相应的调用API。

访问

假设定义了一个类 User,我们首先需要建立这个类的反射类实例,然后基于这个实例可以访问 User 中的属性或者方法。不管类中定义的成员权限声明是否为public,都可以获取到。

<?php 

namespace Extend;

 

use ReflectionClass;

use Exception;

 

/**

 * 用户相关类

 * Class User

 * @package Extend

 */

class User{

  const ROLE = 'Students';

  public $username = '';

  private $password = '';

 

  public function __construct($username, $password)

  {

    $this->username = $username;

    $this->password = $password;

  }

 

  /**

   * 获取用户名

   * @return string

   */

  public function getUsername()

  {

    return $this->username;

  }

 

  /**

   * 设置用户名

   * @param string $username

   */

  public function setUsername($username)

  {

    $this->username = $username;

  }

 

  /**

   * 获取密码

   * @return string

   */

  private function getPassword()

  {

    return $this->password;

  }

 

  /**

   * 设置密码

   * @param string $password

   */

  private function setPassowrd($password)

  {

    $this->password = $password;

  }

}

 

$class = new ReflectionClass('Extend\User'); // 将类名User作为参数,即可建立User类的反射类

$properties = $class->getProperties(); // 获取User类的所有属性,返回ReflectionProperty的数组

$property = $class->getProperty('password'); // 获取User类的password属性ReflectionProperty

$methods = $class->getMethods();  // 获取User类的所有方法,返回ReflectionMethod数组

$method = $class->getMethod('getUsername'); // 获取User类的getUsername方法的ReflectionMethod

$constants = $class->getConstants();  // 获取所有常量,返回常量定义数组

$constant = $class->getConstant('ROLE');  // 获取ROLE常量

$namespace = $class->getNamespaceName(); // 获取类的命名空间

$comment_class = $class->getDocComment(); // 获取User类的注释文档,即定义在类之前的注释

$comment_method = $class->getMethod('getUsername')->getDocComment(); // 获取User类中getUsername方法的注释文档

注意:创建反射类时传送的类名,必须包含完整的命名空间,即使使用了 use 关键字。否则找不到类名会抛出异常。

以上就是php提供了什么来实现反射的详细内容,感谢大家的学习和对三水点靠木的支持。

PHP 相关文章推荐
php代码优化及php相关问题总结
Oct 09 PHP
PHP中对数据库操作的封装
Oct 09 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php多任务程序实例解析
Jul 19 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 PHP
php探针使用原理和技巧讲解
Sep 17 #PHP
php探针不显示内存解决方法
Sep 17 #PHP
Laravel 模型关联基础教程详解
Sep 17 #PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 #PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 #PHP
PHP实现的AES 128位加密算法示例
Sep 16 #PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 #PHP
You might like
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
2013/05/06 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
php实现中文转数字
2016/02/18 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
php实现websocket实时消息推送
2018/03/30 PHP
js href的用法
2010/05/13 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
Python自动扫雷实现方法
2015/07/25 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Python中安装easy_install的方法
2018/11/18 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
百思买美国官网:Best Buy
2016/07/28 全球购物
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
教师节班会开场白
2015/06/01 职场文书
看雷锋电影观后感
2015/06/10 职场文书
高考升学宴主持词
2019/06/21 职场文书
React实现动效弹窗组件
2021/06/21 Javascript