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 相关文章推荐
初学者入门:细述PHP4的核心Zend
Sep 05 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
Php-Redis安装测试笔记
Mar 05 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
php 如何禁用eval() 函数实例详解
Dec 01 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学习笔记之二 php入门知识
2011/01/12 PHP
PHP的拦截器实例分析
2014/11/03 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
模拟select的代码
2011/10/19 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
实用自动化运维Python脚本分享
2018/06/04 Python
python dlib人脸识别代码实例
2019/04/04 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
python中自带的三个装饰器的实现
2019/11/08 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
计算机专业自我鉴定
2013/10/15 职场文书
测绘工程个人的自我评价
2013/11/10 职场文书
大学军训感想
2014/02/12 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
数学教师个人总结
2015/02/06 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
爱国主义主题班会
2015/08/14 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL