php中的反射机制

PHP反射API的性能评估与优化 当谈到PHP反射API的性能评估与优化时,首先需要了解反射API在PHP中的用途。反射API允许您在运行时检查类、接口、函数、方法和属性的结构和行为。然而,由于反射涉及额外的元数据处理,它可能会比直接访问对象或调用方法稍微慢一些。 阅读详情
PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。

请注意部分内部 API 丢失了反射扩展工作所需的代码。 例如,一个内置的 PHP 类可能丢失了反射属性的数据。这些少数的情况被认为是错误,不过, 正因为如此,它们应该被发现和修复。

举个栗子吧,我有个Person类

/**
 * Class Person
 * php反射获取类相关信息
 * @author lightWay
 * @version 1.2
 * @since 1.0
 */
class Person {
    protected $gender; //性别
    private $age; //年龄
    public $name; //姓名
    static $num; //统计多少人
    const HOME = 'china'; //家乡

    /**
     * Person constructor.
     * @param $name string 姓名
     * @param $age integer 年龄
     * @param $gender string 性别
     */
    public function __construct($name,$age,$gender)
    {
        $this->name = $name;
        $this->age = $age;
        $this->gender = $gender;
        self::$num++;
    }

    /**
     * 说出自己的名字
     */
    public function sayMyName()
    {
        echo 'my name is ',$this->name;
    }

    /**
     * 说出自己的性别
     */
    protected function sayMySex()
    {
        echo 'my sex is ',$this->gender;
    }

    /**
     * 说出自己的年龄
     */
    private function sayMyAge()
    {
        echo 'my age is ',$this->age;
    }

    /**
     * @param $val string 需要格式化打印的数据
     */
    public static function pp($val)
    {
        echo "<pre>";
        var_dump($val);
    }
}
传统的方式,想窥探类的内部怎么做呢,get_class系列函数

$person = new Person('lightWay','24','male');

//常规的做法

Person::pp(get_class($person)); //根据对象名返回类名

Person::pp(get_class_methods('Person')); //根据类名返回类的方法名组成的数组

Person::pp(get_class_vars('Person')); //根据类名返回类的默认属性组成的数组,公有属性

Person::pp(get_object_vars($person)); //根据对象名回有对象属性组成的关联数组,公有属性

var_dump($person);  //直接var_dump()方式打印对象




很多方法并不能完全窥探到类的内部,get_class_vars方法和get_object_vars方法,都是只能看到公共的属性,get_class_methods也只能看到公有的方法。

尝试下用php的放射机制看看:

//反射做法
$reflection = new ReflectionClass('Person');

$properties = $reflection->getProperties(); //获取所有类属性

$methods = $reflection->getMethods(); //获取所有的方法

$constants = $reflection->getConstants(); //获取所有的常量信息

//获取类注释
print_r($reflection->getDocComment());

//输出所有方法的注释
foreach ($methods as $i)
{
    Person::pp($i->getDocComment());
}

//打印所有成员属性
foreach ($properties as $v)
{
    echo $v->getName(),'<br />';
}

//打印所有方法名称
foreach ($methods as $v)
{
    echo $v->getName(),'<br />';
}


默认情况下,ReflectionClass会获取到所有的属性,private 和 protected的也可以。如果只想获取到private属性,就要额外传个参数:

//只要私有的属性
Person::pp($reflection->getProperties(ReflectionProperty::IS_PRIVATE));
可用参数列表:
ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE
如果要同时获取public 和private 属性,就这样写:ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED


不过这样也是很麻烦的,如果我是想看整个类的内部呢,有没有一个可以直接打印一个类,让人一目了然,当然有,

//输出整个类结构
echo "<pre>";
Reflection::export($reflection);


比var_dump强太多了吧!


PHP中的反射机制:动态编程的应用与挑战 反射机制是指在程序运行时,能够获取和操作类、方法、属性等元数据的能力。通过反射,开发者可以在不直接访问源代码的情况下,动态地获取类的结构信息,并调用其方法或访问其属性。 阅读详情

相关推荐

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search

论文阅读—Square Attack: a query-efficient black-box adversarial attack via random search 发表位置 ECCV 2020 摘要 作者提出了一种基于得分的黑盒Square attack,该模型不依赖于模型的局部梯度信息,因此可以绕过梯度隐藏防御攻击。Square Attack是一种随机搜索方法,它在随机位置选择局部的方形更新,使得每次迭代时扰动近似位于可行集的边界。 背景 当涉及到对安全至关重要的机器学习应用时,对抗性的例子尤其值得

yayayamaomaoya的博客 2493

PHP反射

PHP反射是一种强大的机制,允许在运行时检查类、接口、方法、属性等的结构和元数据。它可以用于许多场景,如自动化测试、文档生成、依赖注入等。

weixin_42695345的博客 1443

最新打赏系统打赏源码麒麟最新打赏源码喜盈门打赏知识付费课程教程直播讲解

打赏源码打赏系统

qq_41095398的博客 2030

PHP中的反射机制以及如何使用反射

在 PHP 中,反射(Reflection)是一种机制,用于在运行时动态地获取类、接口、函数、方法等的信息。反射机制允许我们在运行时分析和修改代码结构,包括类的属性和方法等。

uestc_zj的博客 1886

西门子S7-1200 PLC与伺服电机控制实战解析

工业自动化控制系统中,PLC(可编程逻辑控制器)与伺服电机的协同工作是实现精密运动控制的核心技术。通过PROFINET工业以太网协议,PLC可以高效地控制多台伺服电机,实现定位、同步和插补等复杂运动。在实际工程应用中,硬件组态的正确配置和运动控制算法的优化是关键挑战。本文以西门子S7-1200 PLC控制五台伺服电机的项目为例,详细介绍了从硬件组态、运动控制程序实现到HMI界面设计的全流程。特别针对多轴同步插补运动、动态速度曲线调整等特殊工艺需求,提供了实用的解决方案和调试技巧,为工业自动化领域的工程师提供

weixin_30252709的博客 497

随机森林模型及案例(Python)

1 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。 集成学习模型的常见算法有Bagging算法和Boosting算法两种。 Bagging算法的典型机器学习模型为随机森林模型,而Boosting算法的典型机器学习模型则为AdaBoost、GBDT、XGBoost和LightGBM模型。 1.1 Bagging算法简介 Bagging算法的原理类似投票,每个弱学习器都有一票,最终根据所有弱学习器的投

qq_42433311的博客 4万+

php7反射类性能,PHP7.4新增十大特性总结

不久前,PHP7.4作为PHP脚本语言的最新功能发布,相信大家对此或多或少都已经有所了解了。本文将为大家总结一下PHP7.4新增的十大特性,分别是支持从 __toString() 方法抛出异常;类型化属性的支持;弱引用;箭头函数的支持;预加载;新的自定义对象序列化机制;合并分配运算符;数组表达式中的展开运算符;为引用提供的反射以及协变量返回和协变量参数。下面我们一起来看看新特性的详细总结。1、支持...

weixin_35804557的博客 401

Unity游戏开发客户端Unity基础

Unity游戏开发客户端面经 之 Unity 篇

Sea3752的博客 2万+

PHP反射机制简单理解

什么是反射呢? 在PHP的面向对象编程中的对象,它被系统赋予自省的能力,而这个自省的过程,我们把它叫做反射。 我们对反射的直观理解可以是,根据达到地,找到出发地和来源这么一个过程,通俗来讲就是,我给你一个光秃秃的对象,完事你可以根据这个对象,知道它所属的类,拥有哪些方法。 在PHP中,反射是指在PHP运行状态中,扩展分析PHP程序,导出或者提取出关于类、属性、方法、参数等的详细信息,包括注释...

luyaran的博客 1万+

ANSYS APDL齿轮建模实战:从渐开线方程到完整3D模型的保姆级教程

本文详细介绍了使用ANSYS APDL进行齿轮建模的全过程,从渐开线方程的数学基础到完整3D模型的创建。通过参数化命令流实现高精度齿轮建模,特别适合机械设计和仿真分析需求。教程包含关键参数计算、APDL环境配置、单齿齿廓建模以及全齿轮阵列复制等实用技巧,帮助工程师快速掌握ANSYS APDL在齿轮建模中的应用。

lg888的博客 446

MATLAB - 使用 RRT 进行挖掘机运动规划

本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中模拟结果。

机器人控制与仿真应用 1850

PHP反射机制

HP反射机制是PHP语言中的一个强大特性,它允许程序在运行时检查、获取和操作类、方法、属性等元素的信息。这一机制极大地提高了PHP代码的灵活性和可维护性,使得开发者能够在不修改原有代码结构的情况下,动态地了解并操作代码。

sheji888的专栏 1413

2026实测可用!4个专业AI Agent Skills垂直搜索平台对比

📊本文以表格形式整理4个实测可用的专业AI Agent Skills垂直搜索平台,涵盖资源规模、适配生态等关键维度🤖,适合开发者按需选择技能获取渠道,解决平台筛选与访问难题✨

XiaoqiangClub的博客 524

php的反射机制是什么 如何组织反射机制中的各种对象关系

问:PHP里反射机制是什么? 答:php的反射机制其实是比较高等一点的知识点了,是php5之后才加入这个功能,你既然了解到了这一点,就说明你对php的运用有相当一段时间了。反射机制其实就是“透视”+“规划”。为什么这么说呢,白话形容这个功能就是,不需要看源代码,只需要把类名或者对象传给反射类,然后就能获取到类的相关信息,例如常量、方法,甚至注释,这就是透视你的一切。然后呢就能策反你,让你为我所有...

u012274988的博客 230

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

php反射机制详解,PHP反射机制

PHP反射机制PHP反射机制从PHP5开始支持,做业务开发的话应该很少接触反射。我其实也是接触不多,最近在学习laravel的"优雅",就接触了到它其中的反射用法,已经我自己的看法想法。反射按照之前的套路,我们来看一下官方手册,官方是怎么说的。PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。...

weixin_42584586的博客 334

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

php反射机制

php反射机制:根据类名或类的对象获取类的信息,包括类中的属性,方法,方法权限,注释等 应用场景: 生成类文档 实现 MVC 架构 // 实现mvc // 方法一: // 根据路由信息定位控制器($controller) 和方法($method),使用反射实现自动调用 $class = new ReflectionClass(ucfirst($controller) . 'Controller'); $controller = $class->newInstance(); if ($class

weixin_38230961的博客 240

关于php反射机制的一些理解

//=====纯属是个人的理解,不一定正确,请谅解====== 关于php的反射机制,php反射机制的最大的用处是通过一个实例化的对象来获取对象所属类的一些信息,而可以通过该对象所属类的相关信息来对对象进行别的操作。 下面我用一个例子来理解一下php的反射机制 首先先定义一个Person类,类里面有$name,$age,$sex的属性以及它们的get和set方法,这个很容易。 /*...

qq_41297145的博客 282

php 反射效率,PHP反射机制

PHP反射机制PHP反射机制从PHP5开始支持,做业务开发的话应该很少接触反射。我其实也是接触不多,最近在学习laravel的"优雅",就接触了到它其中的反射用法,已经我自己的看法想法。反射按照之前的套路,我们来看一下官方手册,官方是怎么说的。PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。...

weixin_40000999的博客 277

PHP反射机制简单运用

Q:static修饰的静态方法无法使用this,所以this,所以this,所以this->method()方式在静态方法中不可用 A:通过php反射机制将自身类反射并实例化,则解决该问题。 ...

weixin_41395961的博客 957

【反射】PHP的反射机制【原创】

【反射】PHP的反射机制【原创】 摘要:主要是参考列旭松、陈文著的《PHP核心技术与最佳实践》的1.5节。 1.1 定义 反射,直观理解就是根据到达地找到出发地和来源。比如说,给你一个光秃秃的对象,可以仅仅通过这个对象就能知道它所属的类以及拥有的方法。 反射,指在PHP运行状态中,扩展分析PHP程序,导出或提取出...

liNewman的博客 349

php 反射机制

【代码】php 反射机制。

qq_37805832的博客 269

跟着辛星深入探讨一下PHP的反射机制

早在之前学习Java的时候,清楚的记得是学完了多线程之后学习的反射,现在在PHP中当然也有反射机制,如果童鞋你还不明白,那就需要搞明白奥,毕竟反射的功能还是蛮强大的,学习它还是很具有现实意义的。 反射从简单去理解就是我们拿到一个类,得到这个类的一些信息,比如它有哪些方法、有哪些参数等等,当然我们还可以动态的去调用它的方法等等一些功能,它的用途就是可以自动加载插件、自动生成文档等等,从而达到扩展PH

辛星,前进的路上. 2756

PHP反射机制用法实例,简述php反射机制实例详解

摘要:这篇文章主要介绍了PHP反射机制用法,是PHP程序设计中比较重要的概念,需要的朋友可以参考下一、反射是什么反射是操纵面向对象范型中元模型的API(php5)通过ReflectionClass,我们可以得到Person类的以下信息:1)常量 Contants2)属性 Property Names3)方法 Method Names静态4)属性 Static Properties5)命名空间 Na...

weixin_39647734的博客 160

PHP反射机制详解

什么是反射 反射机制就是不需要实例化对象,利用类名就可以获取关于这个类的一系列信息,具有对类、接口、函数、方法和扩展进行反向工程的能力。 直观理解就是根据结果找出原因。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。 如何使用反射API 以下面代码为例 class HandsonBoy { public $name = 'chenqionghe'; public $age = 18; public function __set($name,$value) {

@日月空@的博客 292
上一篇: PHP中str_replace字符串替换函数详解
下一篇: php面向对象之重载(overloading)
键盘钢琴师
博客等级 码龄11年 21粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值