数码资讯
一个例子介绍了PHP的反射反射机制
PHP5添加了一个新的特征:反射。此功能允许程序员逆向工程类、接口、功能、方法和扩展。通过PHP代码,你可以得到所有的对象信息,可以与它进行交互。 假设有一个阶级的人: 复制代码代码如下所示: 类人{ *为了演示,我们正在设置这个私有 * / 私人_allowdynamicattributes美元=
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
PHP5添加了一个新的特征:反射。此功能允许程序员逆向工程类、接口、功能、方法和扩展。通过PHP代码,你可以得到所有的对象信息,可以与它进行交互。
假设有一个阶级的人:
复制代码代码如下所示:
类人{
*为了演示,我们正在设置这个私有
* /
私人_allowdynamicattributes美元= false;
类型= primary_autoincrement / * * /
受保护的$ id = 0;
类型= varchar长度= 255 / /零* * *
受保护的$名称;
类型=文本null
受保护的传记;
公共函数getID()
{
返回$;
}
公共功能的压缩文件SetID($ V)
{
$;
}
公共职能getName()
{
返回$这个名称;
}
公共职能setName($ V)
{
$;
}
公共功能getbiography()
{
这是传记;
}
公共功能setbiography($ V)
{
这篇传记;
}
}
通过ReflectionClass,我们可以从中得到以下的人类信息:
1。常数常数
2。属性名称
3。方法名称
4。静态属性
5。命名空间的命名空间
6人称类是最终的还是抽象的
只是通过类的名称人ReflectionClass。
复制代码代码如下所示:
美元类=新ReflectionClass('person);
获取属性(属性):
复制代码代码如下所示:
$属性=美元类-> getProperties();
foreach($美元财产性质){
echo $属性-> getName()。;
}
输出:
/ / _allowdynamicattributes
/名称
{传记}
默认情况下,ReflectionClass会得到所有的性质,以及私有和保护。如果你只是想获得的私有财产,你想通过参数外量:
复制代码代码如下所示:
private_properties美元=美元类-> getProperties(reflectionproperty::is_private);
可用参数列表:
复制代码代码如下所示:
reflectionproperty::is_static
reflectionproperty::is_public
reflectionproperty::is_protected
reflectionproperty::is_private
如果你想得到的公共属性,写私人reflectionproperty:::::| is_public is_protected reflectionproperty
你不应该感到奇怪。
属性名可以获得美元财产> getName(),和注释写入属性可以通过getdoccomment获得。
复制代码代码如下所示:
foreach($美元财产性质){
如果($属性->保护()){
docblock美元=美元财产-> getdoccomment();
(preg_match / =({ a-z_ } *)属性-> getdoccomment美元($匹配) /,,);
匹配$ { 1 }。;
}
}
输出:
/ / primary_autoincrement
/ / varchar
文本
这有点奇怪,即使是注释也可以。
存取方法(方法):通过getMethods获得所有的类方法(),返回的是反射对象数组。没有更多的演示。
最后,在类的方法是通过反射波法。
复制代码代码如下所示:
$ =数组()= 1,名称克里斯
foreach(美元美元美元数据关键=值){
如果(!美元类-> hasproperty($键)){
抛出新的异常($键)。不是一个有效的属性;
}
如果(!美元类-> hasmethod(。Ucfirst($关键))){
抛出新的异常($键)。缺少一个消气剂;
}
如果(!美元类-> hasmethod(。Ucfirst($关键))){
抛出新的异常($键)。缺少一个二传手;
}
创建一个新对象来进行交互
对象=新的人();
获取get方法,并将其与数据数组中的值一起调用
二传=美元美元类-> getMethod(设置。Ucfirst($键));
$ $ = $;
获取方法并调用它
二传=美元美元类>中(得到。Ucfirst($键));
objvalue美元=美元->调用setter(元对象);
现在比较
如果(美元价值= = $ objvalue){
吸气剂或二传手修改了数据。;
{人}
应答器和设置程序不修改数据。;
}
}
有点意思。
假设有一个阶级的人:
复制代码代码如下所示:
类人{
*为了演示,我们正在设置这个私有
* /
私人_allowdynamicattributes美元= false;
类型= primary_autoincrement / * * /
受保护的$ id = 0;
类型= varchar长度= 255 / /零* * *
受保护的$名称;
类型=文本null
受保护的传记;
公共函数getID()
{
返回$;
}
公共功能的压缩文件SetID($ V)
{
$;
}
公共职能getName()
{
返回$这个名称;
}
公共职能setName($ V)
{
$;
}
公共功能getbiography()
{
这是传记;
}
公共功能setbiography($ V)
{
这篇传记;
}
}
通过ReflectionClass,我们可以从中得到以下的人类信息:
1。常数常数
2。属性名称
3。方法名称
4。静态属性
5。命名空间的命名空间
6人称类是最终的还是抽象的
只是通过类的名称人ReflectionClass。
复制代码代码如下所示:
美元类=新ReflectionClass('person);
获取属性(属性):
复制代码代码如下所示:
$属性=美元类-> getProperties();
foreach($美元财产性质){
echo $属性-> getName()。;
}
输出:
/ / _allowdynamicattributes
/名称
{传记}
默认情况下,ReflectionClass会得到所有的性质,以及私有和保护。如果你只是想获得的私有财产,你想通过参数外量:
复制代码代码如下所示:
private_properties美元=美元类-> getProperties(reflectionproperty::is_private);
可用参数列表:
复制代码代码如下所示:
reflectionproperty::is_static
reflectionproperty::is_public
reflectionproperty::is_protected
reflectionproperty::is_private
如果你想得到的公共属性,写私人reflectionproperty:::::| is_public is_protected reflectionproperty
你不应该感到奇怪。
属性名可以获得美元财产> getName(),和注释写入属性可以通过getdoccomment获得。
复制代码代码如下所示:
foreach($美元财产性质){
如果($属性->保护()){
docblock美元=美元财产-> getdoccomment();
(preg_match / =({ a-z_ } *)属性-> getdoccomment美元($匹配) /,,);
匹配$ { 1 }。;
}
}
输出:
/ / primary_autoincrement
/ / varchar
文本
这有点奇怪,即使是注释也可以。
存取方法(方法):通过getMethods获得所有的类方法(),返回的是反射对象数组。没有更多的演示。
最后,在类的方法是通过反射波法。
复制代码代码如下所示:
$ =数组()= 1,名称克里斯
foreach(美元美元美元数据关键=值){
如果(!美元类-> hasproperty($键)){
抛出新的异常($键)。不是一个有效的属性;
}
如果(!美元类-> hasmethod(。Ucfirst($关键))){
抛出新的异常($键)。缺少一个消气剂;
}
如果(!美元类-> hasmethod(。Ucfirst($关键))){
抛出新的异常($键)。缺少一个二传手;
}
创建一个新对象来进行交互
对象=新的人();
获取get方法,并将其与数据数组中的值一起调用
二传=美元美元类-> getMethod(设置。Ucfirst($键));
$ $ = $;
获取方法并调用它
二传=美元美元类>中(得到。Ucfirst($键));
objvalue美元=美元->调用setter(元对象);
现在比较
如果(美元价值= = $ objvalue){
吸气剂或二传手修改了数据。;
{人}
应答器和设置程序不修改数据。;
}
}
有点意思。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。