PHP反射指的是什么


这篇“PHP反射指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP反射指的是什么”文章吧。 反射,直观理解就是根据到达地找到出发地和来源。 反射指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取信息以及动态调用对象方法的功能称为反射API。不妨先来看一个demo:

id=$id;
$this->name=$name;
$this->skills=$skills;
}

publicfunctiongetName()
{
return$this->name;
}
publicfunctiongetSkill()
{
p('skill',$this->skills);
}
}


$ref=newReflectionClass('Demo');
if($ref->isInstantiable()){
p('检查类是否可实例化isInstantiable',null);
}
$constructor=$ref->getConstructor();
p('获取构造函数getConstructor',$constructor);

$parameters=$constructor->getParameters();
foreach($parametersas$param){
p('获取参数getParameters',$param);
}

if($ref->hasProperty('name')){
$attr=$ref->getProperty('name');
p('获取属性getProperty',$attr);
}

$attributes=$ref->getProperties();
foreach($attributesas$row){
p('获取属性列表getProperties',$row->getName());
}

if($ref->hasMethod('getSkill')){
$method=$ref->getMethod('getSkill');
p('获取方法getMethod',$method);
}

$methods=$ref->getMethods();
foreach($methodsas$row){
p('获取方法列表getMethods',$row->getName());
}

$instance=$ref->newInstanceArgs([1,'sai',['php','js']]);
p('newInstanceArgs',$instance);

输出:

➜phpgit:(main)phpreflect.php

检查类是否可实例化isInstantiable:

获取构造函数getConstructor:ReflectionMethodObject
(
[name]=>__construct
[class]=>Demo
)


获取参数getParameters:ReflectionParameterObject
(
[name]=>id
)


获取参数getParameters:ReflectionParameterObjec免费云主机域名t
(
[name]=>name
)


获取参数getParameters:ReflectionParameterObject
(
[name]=>skills
)


获取属性getProperty:ReflectionPropertyObject
(
[name]=>name
[class]=>Demo
)


获取属性列表getProperties:id

获取属性列表getProperties:name

获取属性列表getProperties:skills

获取方法getMethod:ReflectionMethodObject
(
[name]=>getSkill
[class]=>Demo
)


获取方法列表getMethods:__construct

获取方法列表getMethods:getName

获取方法列表getMethods:getSkill

newInstanceArgs:DemoObject
(
[id:Demo:private]=>1
[name:protected]=>sai
[skills]=>Array
(
[0]=>php
[1]=>js
)

)

demo里面就有使用了ReflectionClass类,当然ReflectionClass类不止于这些方法。更多方法ReflectionClass类还有更多方法:除去强大的ReflectionClass,还有Reflection、ReflectionClassConstant 、ReflectionMethod 、ReflectionFunctionAbstract等等。建议查看手册:PHP反射反射的实际应用反射可以用于文档、文件生成。可以用它对文件里的类进行扫描,逐个生成描述文档;既然反射可以探知类的内部结构,那么可以用它做hook实现插件功能;可以用于做动态代理,在未知或者不确定类名的情况下,动态生成和实例化一些类和执行方法;依赖注入。对于多次继承的类,我们可以通过多次反射探索到基类的结构,或者采用递归的形式反射,实现实例化所有继承类,这也是PHP依赖注入的原理。反射的优点支持反射的语言提供了一些在低级语言中难以实现的运行时特性。可以在一定程度上避免硬编码,提供灵活性和通用性。可以作为一个第一类对象发现并修改源代码的结构(如代码块、类、方法、协议等)。可以在运行时像对待源代码语句一样计算符号语法的字符串(类似JavaScript的eval()函数),进而可将跟class或function匹配的字符串转换成class或function的调用或引用。可以创建一个新的语言字节码解释器来给编程结构一个新的意义或用途。反射的缺点学习成本高。面向反射的编程需要较多的高级知识,包括框架、关系映射和对象交互,以利用更通用的代码执行同样因为反射的概念和语法都比较抽象,过多地滥用反射技术会使得代码难以被其他人读懂,不利于合作与交流反射在提高了代码灵活性的同时,牺牲了一点点运行效率,有一定的消耗反射也会破坏类的封装性,把本不该暴露的方法或属性暴露了出来以上就是关于“PHP反射指的是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道。

相关推荐: android studio如何实现上传图片到java服务器

这篇“androidstudio如何实现上传图片到java服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“androidstudio如何实现…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/10 18:48
Next 05/10 18:48

相关推荐