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 相关文章推荐
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
php中autoload的用法总结
Nov 08 PHP
php权重计算方法代码分享
Jan 09 PHP
PHP中常用的转义函数
Feb 28 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php简单判断文本编码的方法
Jul 30 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
微信支付开发告警通知实例
Jul 12 PHP
Laravel框架表单验证操作实例分析
Sep 30 PHP
Laravel实现ORM带条件搜索分页
Oct 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中的unicode和utf8编码
2015/06/10 PHP
jquery提示 &quot;object expected&quot;的解决方法
2009/12/13 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
使用python实现strcmp函数功能示例
2014/03/25 Python
python进程管理工具supervisor使用实例
2014/09/17 Python
python之pandas用法大全
2018/03/13 Python
基于python3实现socket文件传输和校验
2018/07/28 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
给护士表扬信
2014/01/19 职场文书
优秀幼教自荐信
2014/02/03 职场文书
批评与自我批评材料
2014/02/15 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
2014年校长工作总结
2014/12/11 职场文书
罚站检讨书
2015/01/29 职场文书
英语通知范文
2015/04/22 职场文书
python如何读取.mtx文件
2021/04/22 Python
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
浅析python中特殊文件和特殊函数
2022/02/24 Python