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 mysql索引问题
Jun 07 PHP
php array_map array_multisort 高效处理多维数组排序
Jun 11 PHP
php excel reader读取excel内容存入数据库实现代码
Dec 06 PHP
使用Sphinx对索引进行搜索
Jun 25 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
迁移PHP版本到PHP7
Feb 06 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
浅析PHP7的多进程及实例源码
Apr 14 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 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
PHP三元运算的2种写法代码实例
2014/05/12 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
javascript 写类方式之十
2009/07/05 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
vue实现计算器功能
2020/02/22 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python生成任意频率正弦波方式
2020/02/25 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
Java模拟试题
2014/11/10 面试题
摄影实习自我鉴定
2013/09/20 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
保险公司早会主持词
2014/03/22 职场文书
学校中秋节活动总结
2015/03/23 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
python缺失值填充方法示例代码
2022/12/24 Python