TGViewer
PHP | Вопросы собесов PHP | Вопросы собесов @easy_php_ru · 2.3K subscribers
Post #1813 539
🤔 Для чего нужна рефлексия?

Рефлексия (Reflection) – это механизм анализа классов, методов, свойств и других структур во время выполнения. Она позволяет получать информацию о коде и даже изменять его динамически.

🚩Когда полезна рефлексия?

🟠Фреймворки и DI-контейнеры
- Используется для автоматического внедрения зависимостей (Dependency Injection, DI).
- Например, Laravel использует рефлексию в Container для автоматического создания объектов.
class Database {
public function connect() {
return "Подключение к базе данных";
}
}

class UserService {
private $db;

public function __construct(Database $db) {
$this->db = $db;
}

public function getUser() {
return "Пользователь найден";
}
}

function resolve($class) {
$reflector = new ReflectionClass($class);
$constructor = $reflector->getConstructor();

if (!$constructor) {
return new $class;
}

$params = $constructor->getParameters();
$dependencies = [];

foreach ($params as $param) {
$type = $param->getType();
if ($type) {
$dependencies[] = resolve($type->getName());
}
}

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

$service = resolve(UserService::class);
echo $service->getUser(); // "Пользователь найден"


🟠Декораторы, аннотации и атрибуты
- В PHP 8 появились атрибуты (аннотации), и рефлексия помогает их читать.
- Используется в Symfony, Doctrine для работы с ORM.
#[Attribute]
class Route {
public function __construct(public string $path) {}
}

class Controller {
#[Route('/home')]
public function home() {
return "Домашняя страница";
}
}

$reflection = new ReflectionMethod(Controller::class, 'home');
$attributes = $reflection->getAttributes(Route::class);
$route = $attributes[0]->newInstance();

echo $route->path; // "/home"


🟠Автоматическая генерация документации
- Реально использовать для автоматического создания Swagger/OpenAPI.
- Можно извлекать PHPDoc-комментарии и на их основе генерировать документацию.
class Example {
/**
* Возвращает приветствие
* @return string
*/
public function sayHello() {
return "Привет!";
}
}

$reflection = new ReflectionMethod(Example::class, 'sayHello');
echo $reflection->getDocComment();


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_php_ru
  1. Oct 18, 2026🤔 Какой синтаксис у заголовков? Заголовки в языках и разметки часто используются для указ…
  2. Oct 17, 2026🤔 Что такое шифрование? Это процесс преобразования данных в защищённый формат (шифртекст)…
  3. Oct 17, 2026🤔 Зачем использовать Rest , если есть Soup? SOAP (Simple Object Access Protocol) и REST (…
  4. Oct 16, 2026🤔 Какие типы БД бывают? Базы данных делятся на реляционные (SQL) и нереляционные (NoSQL).…
  5. Oct 16, 2026🤔 Что такое агрегат? Агрегат – это термин, часто используемый в области баз данных и прог…
  6. Oct 15, 2026🤔 Что такое замыкание? Это функция, которая «захватывает» переменные из внешней области в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →