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 CKEditor 上传图片实现代码
Nov 06 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
解析使用ThinkPHP应该掌握的调试手段
Jun 20 PHP
php中的比较运算符详解
Oct 28 PHP
ThinkPHP模板自定义标签使用方法
Jun 26 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php双层循环(九九乘法表)
Oct 23 PHP
php通过header发送自定义数据方法
Jan 18 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
PHP7 foreach() 函数修改
Mar 09 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 单引号与双引号的区别
2009/11/24 PHP
PHP daddslashes 使用方法介绍
2012/10/26 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
javascript英文日期(有时间)选择器
2007/05/02 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
浅谈对yield的初步理解
2017/05/29 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
机关班子查摆问题及整改措施
2014/10/28 职场文书
公务员考察材料范文
2014/12/23 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书