使用注释有一个缺点。由于它们是在注释上定义的(这很奇怪),因此您将无法使用预编译器(如 Zend Guard)或一些字节码 php 缓存扩展来增强代码性能(其中一些会去除注释)。因为注释是唯一具有这种技术缺陷的规范,我不建议使用它。
此外,在评论上写“功能性”的东西也很奇怪。
XML 比 YAML 详细得多,但也更广为人知。XML 的文档示例是所有选项中最差的。
YAML 比其他任何一种都更具可读性,但它也依赖于空间标识(有些人不喜欢)。Symfony 默认使用 YAML 进行配置,因此许多使用 Symfony 的人选择使用 YAML 进行学说映射——这意味着 YAML 示例有很好的文档记录,并且那里有很多资源。
我个人更喜欢 YAML。我可以使用教义模式工具自动生成实体(这意味着我不必编写 getter/setter)。我还可以使用预编译器/字节码缓存选项,而不必担心我的注释被删除。
附加信息:
如果您使用的是 PHP 7.0 或更高版本,那么opcache.save_comments = 0
如果您使用注释,则永远无法在 php.ini 上进行设置。PHP 有一种去除注释的本机方式,这会破坏您的应用程序。Guilherme Blanco 是 Doctrine 最活跃的维护者之一,也是开发大多数项目(Doctrine、Symfony)使用的注释检索类的人,他反对评论注释(如果你阅读了整个线程,你会发现他非常热情对这个)。关于 Reddit 上的评论注释问题也有一些广泛的讨论,大多数人似乎都同意这是一个坏主意。
尽管如此,Symfony 的官方最佳实践书还是建议人们使用注释。因此,大多数 Symfony 包可能会使用注释作为它们的元数据格式。