PHP8 属性注释 Attributes
admin
2023-07-30 19:56:09
0

属性注释 Attributes

 

属性注释是我自己取得名字,在英文原文中是单词「Attributes」(在C++、C#、Rust里也是相同的单词,但翻译有些差别)。这个新语法有点类似Python里的修饰器,以及Java里的Annotation。

但是,PHP里Attributes的作用还是更偏向于替换以前的doc-block,用于给一个类或函数增加元信息,而不是类似Python的修饰器那样,可以动态地劫持函数的输入与输出。

属性注释的简单例子:

#[ListensTo('error')]
function onerror() {
    // do something
}
上面这个例子实际测试你会发现,属性注释里的东西也真的只是一个注释,执行上述的代码也不会去调用ListensTo类。这也印证了上面所说的,Attributes只是对以前doc-block的一个接纳,而非创造了一种HOOK函数的方式。

如果你需要执行Attributes里面的代码,仍然需要通过反射来做到,比如:

#[Attribute]
class ListensTo {
    public string $event;
    
    function __construct($event) 
    {
        $this->event = $event;
    }
}
 
#[ListensTo('error')]
function onerror() 
{
    // do something
}
 
$listeners = [];
$f = new ReflectionFunction('onerror');
foreach($f->getAttributes() as $attribute) {
    $listener = $attribute->newInstance();
    $listeners[$listener->event] = $f;
}

我模拟了一个设计模式中监听模式的事件处理方法注册过程,相比于以前解析Doc-Block的过程,这个流程要更加简单。

相比于其他的新特性,框架或IDE的设计者可能会研究的更深,普通开发者只需要按照框架的文档简单使用这个语法即可。

相关内容

热门资讯

0755950808是哪里的电... 今天0755950808打了好几次电话,还以为是骚扰电话,我都直接挂断了。 晚上又打过来,没啥事就接...
福特福克斯换电瓶后 自动启动没... 最近福克斯换电瓶后,自动启停没恢复,最后用这个方法恢复了 如果换了启停的电瓶还没有启停的话,上高速8...
不小心开通了美团互助如何关闭退... 现在的互联网公司真的无底线,天天吸老百姓的钱。 不知道什么时候自动开通了美团互助,每月都扣钱。还一个...
移动硬盘0x80070091错... 删除移动硬盘里的文件提示:错误0x80070091:目录不为空的 在管理员权限下运行了rmdir命令...
穷叉叉是什么梗? 这几天刷抖音被这个穷叉叉歌曲洗脑了 第一次听很应景,因为我穷啊,一下就记住了 然后抖音就一直反复给我...
四大原耽是哪四大?晋江四大骚攻... 现在耽美文学十分的流行,很多原耽小说也成为大家十分喜爱的作品,耽改剧男主也火的容易。不过最近不少人可...
新疆棉花长绒棉和普通棉的区别 新疆长绒棉,世界顶级,做衣被,暖和、透气、舒适,长年供不应求。为满足国内需求,中国每年需进口200万...
男生戒色10年VS女生戒色10... 男生戒色10年VS女生戒色10年会有哪些不同? 性是人类生理需求之一,但过度追求和滥用会对人身心健康...
联通手机号打不出去电话 昨天用备用手机打电话,提示不让我打电话,说暂停服务,上网还可以。 打10010问客服,说是我之前插拔...
众益知识产权中心到付以“商标公... 今天接到了顺丰电话,说一个到付件需要收费28元,感觉很是奇怪,于是让顺丰拍个照发了过来。 快递但是写...