Doctrine Common annotations library定义了两个实现Reader
接口的注释阅读器:
Doctrine\Common\Annotations\AnnotationReader
Doctrine\Common\Annotations\SimpleAnnotationReader
有谁知道他们之间的区别?
我唯一的提示是SimpleAnnotationReader
上的docblock:
此注释阅读器旨在用于您拥有的项目中 完全控制所有可用的注释。
答案 0 :(得分:4)
您可以为其添加一个被忽略的注释列表,例如@param
和@return
。这可能是一个问题,因为很难排除任何你不想要的注释。
代码示例:
AnnotationRegistry::registerAutoloadNamespace('My\Annotation', 'dir/');
$this->annotationReader = new SimpleAnnotationReader();
$this->annotationReader->addNamespace('My\Annotation');
如果文件中有任何未知的注释,我不会收到错误。
虽然有一个问题:如果用户在注释名称中输入拼写错误,那么读者会默默地忽略它:(
资料来源:在开发PHP-DI时,我测试了两者。 SimpleAnnotationReader
对我来说更好,因为我希望它只能阅读我的@Inject
注释。使用AnnotationReader
时,如果文件中存在任何未知注释,我会收到错误(例如PHPUnit中的@expectedException
)。
另见this issue。
答案 1 :(得分:1)
显然,简单的Annotation阅读器会尝试读取他将在doc块中看到的所有注释,而AnnotationReader可以处理要忽略的注释列表(如@param或@return)。
答案 2 :(得分:1)
看起来在Doctrine代码中解释了两者之间最重要的区别here:SimpleAnnotationDriver
可以处理非导入的注释(给定默认命名空间),而AnnotationReader
需要正确导入的注释。