Что такое рефлексия (Reflection) в PHP?

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

Ответ

Рефлексия в PHP — это набор классов стандартной библиотеки (Reflection API), который позволяет инспектировать структуру кода (классы, методы, свойства, параметры) во время выполнения. Это мощный инструмент для метапрограммирования.

Практический пример из моего опыта: Я использовал Reflection для создания простого DI-контейнера, который автоматически внедрял зависимости через конструктор.

class Container {
    public function resolve($className) {
        $reflectionClass = new ReflectionClass($className);

        if (!$constructor = $reflectionClass->getConstructor()) {
            return new $className(); // Нет конструктора
        }

        $dependencies = [];
        foreach ($constructor->getParameters() as $parameter) {
            $type = $parameter->getType();
            // Рекурсивно разрешаем тип зависимости
            $dependencies[] = $this->resolve($type->getName());
        }

        return $reflectionClass->newInstanceArgs($dependencies);
    }
}

// Использование
$container = new Container();
$service = $container->resolve(MyService::class);

Основные сценарии использования Reflection:

  • Фреймворки и библиотеки: Для реализации Dependency Injection, роутинга, сериализации.
  • Тестирование: Для доступа к приватным методам или свойствам в unit-тестах (хотя это часто признак проблем с дизайном).
  • Инструменты разработки: Генераторы документации, статические анализаторы, IDE.

Важно: Операции Reflection имеют накладные расходы по производительности, поэтому их следует избегать в горячих путях (hot paths) production-кода.