我已经开始学习Symfony(4.1),并且对注解有疑问。
据我所知,注解只是用php表示的注释,它们不是语言本身的一部分。但是,它们在Symfony中是相当强大的功能。
我想知道这一切如何运作。
简单地说,我想知道Symfony中的注释是如何工作的,即此功能的机制。
答案 0 :(得分:6)
是的,的确,注释不是语言本身的一部分。但是它们也不是Symfony框架的一部分。
注释通常由doctrine/annotations
程序包处理(最常见)。它利用反射来读取和解析这些注释,并将它们转换为注释对象(它表示的every annotation has an annotation class)。
然后,由库决定使用代表这些注释的生成对象。
所以要回答第一个问题-是的,有一个预处理器。但它不会“创建新的php实体”,因为它是使用这些注释的库(例如Symfony框架或Doctrine ORM)的工作。
它如何影响性能,取决于使用它们的库。如果对每个请求都进行解析,那确实会影响性能。所以例如Symfony和Doctrine ORM缓存此数据或创建代理类等。
因此,第二个问题的答案是-如果使用不正确,它可能会出现,但通常不会(在生产环境中),因为它们不会每次都被解析。
最后一个问题实际上与注解无关。由于注释实际上是类,因此对它们进行命名的原因也相同。为了避免库之间的冲突并为了易于阅读。