Выбор ответа Senior PHP 8.x: enum, readonly, match обновлено

Атрибуты PHP 8

Вопрос

Как фреймворк узнаёт о маршруте, объявленном атрибутом #[Route("/users", methods: ["GET"])] над методом контроллера?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Читает атрибуты через Reflection API и newInstance(). Атрибуты (PHP 8.0) это структурированные метаданные.

Варианты ответа

  1. PHP автоматически регистрирует маршрут при загрузке класса
  2. Атрибут выполняется как функция при каждом вызове метода
  3. Читает атрибуты через Reflection API и newInstance()правильный ответ
  4. Парсит PHPDoc-комментарий над методом как текст

Разбор

Атрибуты (PHP 8.0) это структурированные метаданные. Сами по себе они ничего не делают, их читает код через рефлексию. Symfony при сборке кеша маршрутов проходит по контроллерам и создаёт объекты атрибутов. Раньше то же делали аннотациями в PHPDoc, которые приходилось разбирать как текст.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме