Для чего нужна рефлексия в PHP?

«Для чего нужна рефлексия в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Рефлексия в PHP — это механизм интроспекции, позволяющий анализировать структуру классов, интерфейсов, функций и методов во время выполнения. Я использую её в основном в двух случаях:

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

Пример из моего опыта с ORM:

// Автоматическое маппинг свойств сущности на столбцы БД
$reflectionClass = new ReflectionClass(User::class);
$properties = $reflectionClass->getProperties();

foreach ($properties as $property) {
    $columnName = $property->getName();
    $property->setAccessible(true);
    // ... логика маппинга данных из БД в свойство объекта
}

Важно: рефлексия работает медленнее прямого вызова и нарушает инкапсуляцию, поэтому я применяю её только там, где без неё действительно не обойтись — в инфраструктурном коде, а не в бизнес-логике.