AnnotationReader和&之间的区别是什么? SimpleAnnotationReader?

时间:2013-04-26 11:37:06

标签: doctrine-orm

Doctrine Common annotations library定义了两个实现Reader接口的注释阅读器:

  • Doctrine\Common\Annotations\AnnotationReader
  • Doctrine\Common\Annotations\SimpleAnnotationReader

有谁知道他们之间的区别?

我唯一的提示是SimpleAnnotationReader上的docblock:

  

此注释阅读器旨在用于您拥有的项目中   完全控制所有可用的注释。

3 个答案:

答案 0 :(得分:4)

  • AnnotationReader 会尝试阅读所有注释。

您可以为其添加一个被忽略的注释列表,例如@param@return。这可能是一个问题,因为很难排除任何你不想要的注释。

  • SimpleAnnotationReader 只能加载您注册的注释。

代码示例:

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代码中解释了两者之间最重要的区别hereSimpleAnnotationDriver可以处理非导入的注释(给定默认命名空间),而AnnotationReader需要正确导入的注释。