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中的CMS的涵义
Mar 11 PHP
深入php var_dump()函数的详解
Jun 05 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
用PHP实现维护文件代码
2007/06/14 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
nginx下安装php7+php5
2016/07/31 PHP
关于JavaScript的一些看法
2009/05/27 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
2016/06/14 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
纯javascript版日历控件
2016/11/24 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
元旦晚会邀请函
2014/01/27 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
会计学自荐信
2014/06/03 职场文书
2015年药店工作总结
2015/04/20 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
四年级数学教学反思
2016/02/16 职场文书
vue 实现上传组件
2021/05/31 Vue.js