PHP8 属性注释 Attributes
属性注释 Attributes
属性注释是我自己取得名字,在英文原文中是单词「Attributes」(在C++、C#、Rust里也是相同的单词,但翻译有些差别)。这个新语法有点类似Python里的修饰器,以及Java里的Annotation。
但是,PHP里Attributes的作用还是更偏向于替换以前的doc-block,用于给一个类或函数增加元信息,而不是类似Python的修饰器那样,可以动态地劫持函数的输入与输出。
属性注释的简单例子:
#[ListensTo('error')] function onerror() { // do something }
如果你需要执行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的设计者可能会研究的更深,普通开发者只需要按照框架的文档简单使用这个语法即可。