Механизм аннотаций в Symfony - как все это работает? - PullRequest
0 голосов
/ 17 октября 2018

Я начал изучать Symfony (4.1) и у меня возник вопрос об аннотациях.

Насколько я знаю, аннотации - это просто комментарии с точки зрения php, и они не являются частью самого языка.,Однако в Symfony они довольно мощная вещь.

Я хочу знать, как все это работает.

  • Существует ли препроцессор кода, который динамически анализирует исходные файлы и создает новые объекты php?
  • Но если это так, как это влияет на производительность приложения?
  • Почему я должен использовать специальные пространства имен для определенных аннотаций?

Проще говоря, я хотел бы знать, как работают аннотации в Symfony, механизм этой функции.

1 Ответ

0 голосов
/ 17 октября 2018

Да, действительно, аннотации не являются частью самого языка.Но они также не являются частью платформы Symfony.

Аннотации обычно обрабатываются пакетом doctrine/annotations (чаще всего).Он использует отражение, чтобы читать и анализировать эти комментарии и преобразовывать их в объекты аннотаций ( у каждой аннотации есть класс аннотации , который он представляет).Затем дело до библиотеки, чтобы использовать сгенерированные объекты, представляющие эти аннотации.

Итак, чтобы ответить на первый вопрос - да, есть препроцессор.Но он не «создает новые сущности php», потому что это работа для библиотеки, которая использует эти аннотации (например, Symfony framework или Doctrine ORM).

То, как это влияет на производительность, зависит от библиотеки, которая используетих.Если они будут анализироваться при каждом запросе, это действительно повлияет на производительность.Например, Symfony и Doctrine ORM кэшируют эти данные или создают прокси-классы и т. Д.

Таким образом, ответ на второй вопрос - возможно, если он используется неправильно, но обычно это не так (в производственной среде), поскольку они просто неанализируется каждый раз.

Последний вопрос на самом деле не относится к аннотациям.Поскольку аннотации на самом деле являются классами, причина их использования в именах также одинакова.Чтобы избежать конфликтов между библиотеками и ради удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...