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实现图象锐化代码
Jun 14 PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
php文件上传的例子及参数详解
Dec 12 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
PHP开发中AJAX技术的简单应用
Dec 11 PHP
twig模板获取全局变量的方法
Feb 05 PHP
Yii2框架使用计划任务的方法
May 25 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
PHP 出现 http500 错误的解决方法
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 smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
概述VUE2.0不可忽视的很多变化
2016/09/25 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
python中退出多层循环的方法
2018/11/27 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
Django实现发送邮件功能
2019/07/18 Python
Django模型修改及数据迁移实现解析
2019/08/01 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
电子商务个人自荐信
2013/12/12 职场文书
说明书范文
2014/05/07 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
一文简单了解MySQL前缀索引
2022/04/03 MySQL