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 相关文章推荐
一个分页的论坛
Oct 09 PHP
?生?D片??C字串
Dec 06 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
有关PHP性能优化的介绍
Jun 20 PHP
使用php计算排列组合的方法
Nov 13 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
php查询mysql数据库并将结果保存到数组的方法
Mar 18 PHP
Yii2使用swiftmailer发送邮件的方法
May 03 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 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操作excel文件 基于phpexcel
2010/07/02 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python理解递归的方法总结
2019/01/28 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
2014年除四害工作总结
2014/12/06 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
城管个人总结
2015/02/28 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
监护人证明
2015/06/19 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
暑假生活随笔
2015/08/15 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
教学反思怎么写
2016/02/24 职场文书