文档章节

如何理解php中的reflection?

J
 JimZhiLi
发布于 2015/09/10 14:13
字数 334
阅读 14
收藏 0

Reflection是指一个对象在运行时检查自己来告诉外界它的方法和属性。表面上看这没有什么用。实际上在软件开发过程中经常会遇到。

  1. 什么是Refection,为什么它很有用?

    Reflection指的是一段代码检查自身并告诉你它的属性,方法和对象类型的能力。一个最常用的场景就是调试代码。你也许用过get_class()和get_class_methods()来检查一个对象。当你不知道对象类型的时候,就必须用到Reflection了。另一个要用到Reflection的地方是建立文档。要建立每个类的每个方法的文档是很费时费力的。Reflection可以自动生成文档。

  2. 经常使用的php Reflection函数

    get_class(), get_class_methods()和method_exists()非常有用。

    var_dump(get_class($bar));  //返回类名字

    var_dump(get_class_methods($bar));  //返回类的方法列表

      class User {
        protected function getUsername() {}
        public function __get($param)
        {
            $method = 'get'.ucfirst($param);
            if (method_exists($this, $method)) {
               return $this->{$method}();
             }
        }
    }

  3. php reflection 类介绍

    $reflection = new \ReflectionClass(new User('Adam Li',new UUID(1234)));

    echo $reflection->getName();//get 全名

    echo $reflection->getshortname();//get short name

    $parent = $reflection->getParentClass();  //return a new ReflectionClass instance

    echo $parent->getName();

    $interfaces = $reflection->getInterfaceNames();  //get all User class' interfaces

    $methods = $reflection->getMethods();  //get all methods

    $constructor = $reflection->getConstructor(); //get constructor,return an instance of ReflectionMethod

    var_dump($constructor->getParameters());  //get the dependencies of the class,return an array of ReflectionParameter

    $parameters = $constructor->getParameters();

    var_dump($parameters[1]->getClass());





© 著作权归作者所有

J
粉丝 0
博文 1
码字总数 334
作品 0
广州
程序员
私信 提问
从零开始理解 Laravel 依赖注入

大家在使用 Laravel 的过程中,可能会感觉到在 Laravel 里很多神奇的东西会发生。依赖注入似乎是一个。但它真的很神奇吗? Laravel 容器(Container) Laravel中的服务容器其实就是一个依赖注入...

如来神掌
2018/05/30
113
0
如何使用反射来分析PHP的数据结构

更准备的说是 如何用PHP分析类内部的结构。 介绍 当我开始学习PHP编程时,可能并不知道 的强大功能,主要原因是我不需要它来设计我的类,模块甚至是包等等,但是它在很多地方都有非常不错的能...

如来神掌
2018/06/02
27
0
php内核分析(七)-扩展

这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux。 我们研究下反射这个扩展。 反射这个扩展目录是存在在:ext/reflection。其实里面的代码很简单。一个.h文件,一个 .c文件。 我们...

王二狗子11
2018/01/07
0
0
Yii2 实例管理

Yii2 实例管理 Yii2框架没有提供类似ZendFramework3中提供的ServiceManager.那么Yii2框架是如何管理对象实例的呢? 长时间使用Yii2框架的童鞋一定已经适应了对象中的public变量,以及一个来自y...

Vett
2017/12/23
0
0
PHP V5.3 中的新特性

PHP V5.3 计划在 2008 年底发行,这个版本包含了大量在过去一直处于计划阶段的新特性。PHP V5.3 在最初被誉为 “只缺少原生 Unicode 支持的 PHP V6”,现在它已经是 PHP V5 系列的全面升级。...

红薯
2008/12/09
188
0

没有更多内容

加载失败,请刷新页面

加载更多

用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
2
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
12
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部