Symfony中注释的机制-一切如何工作?

时间:2018-10-17 08:18:04

标签: php symfony

我已经开始学习Symfony(4.1),并且对注解有疑问。

据我所知,注解只是用php表示的注释,它们不是语言本身的一部分。但是,它们在Symfony中是相当强大的功能。

我想知道这一切如何运作。

  • 是否有代码预处理器可以动态解析源文件并创建新的php实体?
  • 但是,如果这样,它将如何影响应用程序的性能?
  • 为什么我应该对某些注释使用特殊的名称空间?

简单地说,我想知道Symfony中的注释是如何工作的,即此功能的机制。

1 个答案:

答案 0 :(得分:6)

是的,的确,注释不是语言本身的一部分。但是它们也不是Symfony框架的一部分。

注释通常由doctrine/annotations程序包处理(最常见)。它利用反射来读取和解析这些注释,并将它们转换为注释对象(它表示的every annotation has an annotation class)。 然后,由库决定使用代表这些注释的生成对象。

所以要回答第一个问题-是的,有一个预处理器。但它不会“创建新的php实体”,因为它是使用这些注释的库(例如Symfony框架或Doctrine ORM)的工作。

它如何影响性能,取决于使用它们的库。如果对每个请求都进行解析,那确实会影响性能。所以例如Symfony和Doctrine ORM缓存此数据或创建代理类等。

因此,第二个问题的答案是-如果使用不正确,它可能会出现,但通常不会(在生产环境中),因为它们不会每次都被解析。

最后一个问题实际上与注解无关。由于注释实际上是类,因此对它们进行命名的原因也相同。为了避免库之间的冲突并为了易于阅读。