属性注释是我自己取得名字,在英文原文中是单词「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的设计者可能会研究的更深,普通开发者只需要按照框架的文档简单使用这个语法即可。
上一篇:《别董大》 英文版