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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
php include加载文件两种方式效率比较
Aug 08 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
php验证码生成代码
Nov 11 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
Apr 03 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中对数据库操作的封装
2006/10/09 PHP
PHP计数器的实现代码
2013/06/08 PHP
PHP经典面试题集锦
2015/03/19 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
微信公众平台 客服接口发消息的实现代码(Java接口开发)
2019/04/17 Javascript
使用微信SDK自定义分享的方法
2019/07/03 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
python3解析库pyquery的深入讲解
2018/06/26 Python
python将list转为matrix的方法
2018/12/12 Python
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
写好自荐信的要点
2013/11/06 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
中专生职业生涯规划书范文
2013/12/29 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
工会趣味活动方案
2014/08/18 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
职称评定个人总结
2015/03/05 职场文书
2015年药房工作总结
2015/04/25 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Python爬取某拍短视频
2021/06/11 Python
总结Python变量的相关知识
2021/06/28 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript