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 相关文章推荐
提取HTML标签
Oct 09 PHP
PHP 输出简单动态WAP页面
Jun 09 PHP
php读取xml实例代码
Jan 28 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
PHP安全性漫谈
Jun 28 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
php实现的xml操作类
Jan 15 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
Jun 29 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
Jan 15 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 PHP
PHP执行linux命令6个函数代码实例
Nov 24 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的栏目导航程序
2006/10/09 PHP
提高PHP编程效率的方法
2013/11/07 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
JS完成代码前最好对其做5件事
2013/04/07 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python中处理时间的几种方法小结
2015/04/09 Python
Python实现的计算器功能示例
2018/04/26 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
几个MySql的面试题
2013/04/22 面试题
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
小学教师学期末自我评价
2013/09/25 职场文书
社区矫正工作方案
2014/06/04 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
民事二审代理词
2015/05/25 职场文书
2015年国培研修感言
2015/08/01 职场文书
校运会广播稿
2015/08/19 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
Nginx速查手册及常见问题
2022/04/07 Servers
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技