[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Применение Reflection
Another Reality
Всем привет!

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

На примере простого роутинга:

$rc = new ReflectionClass($this->getController());
if($rc->hasMethod($this->getAction()))
{
$controller = $rc->newInstance();
$method = $rc->getMethod($this->getAction());
$method->invoke($controller);
}

Аналогично:

$controller = new $this->_controller;
$method = $this->_action;

if(method_exists($controller, $this->_action))
$controller->$method();

Вопрос - в чем изюм ?
Пока что, очевидно только то, что первый вариант более оопешный.
Делитесь опытом, где применяете ?
jetistyum
Ну, например в конструкторе у тебя может содержаться что-то громоздкое, и в случае с рефлексией тебе не нужно создавать инстанс объекта.

Ну и посмотри на список методов класса ReflectionClass, а там уже используй то, что тебе нравится. smile.gif
Another Reality
Цитата (jetistyum @ 12.08.2016 - 14:33)
Ну, например в конструкторе у тебя может содержаться что-то громоздкое, и в случае с рефлексией тебе не нужно создавать инстанс объекта.

Ну и посмотри на список методов класса ReflectionClass, а там уже используй то, что тебе нравится. smile.gif

Инстанс объекта не нужен чтобы класс перековырять, а вот чтобы выполнить метод - нужен обязательно. Invoke требует объект от которого будет исполнять метод.

http://php.net/manual/en/reflectionmethod.invoke.php

Хотелось бы каких-то реальных прмеров использования.
jetistyum
Цитата (Another Reality @ 12.08.2016 - 14:13)
Инстанс объекта не нужен чтобы его перековырять, а вот чтобы выполнить метод - нужен обязательно. Invoke требует объект от которого будет исполнять метод.


Логично, что для запуска метода объекта нужен объект.

Так что мешает найти варианты использования?

https://github.com/yiisoft/yii/search?utf8=...ReflectionClass
Another Reality
Цитата (jetistyum @ 12.08.2016 - 15:27)

Так что мешает найти варианты использования?

https://github.com/yiisoft/yii/search?utf8=...ReflectionClass

Не, ты не понял. Я не имел ввиду пример кода. smile.gif
В самом первом посте я привел 2 примера, которые делают одно и то же, и спросил "В чем изюм ?". Меня интересуют сферы применения, может есть какие-то фишки и так далее. Помимо очевидного.
Another Reality
Кое-что интересное нашел, такой себе эффектный метод восстановить дефолтное значение поля:

if($this->_basePath===null)
{
$class=new ReflectionClass(get_class($this));
$this->_basePath=dirname($class->getFileName());
}
jetistyum
Цитата (Another Reality @ 12.08.2016 - 15:04)
Не, ты не понял. Я не имел ввиду пример кода.

Так а я тебе что дал? smile.gif там как раз примеры кода.

Лично я с этим классом не работал. Но вот знаю что он используется в Yii-фреймворке.
Ну я думаю ты уже разобрался. Можно посмотреть и другие фреймворки и либы.

Invis1ble
Ну вот один из последних примеров.
Есть доктриновская сущность, у неё есть поле protected $id, а сеттера нет. В одном из юнит-тестов нужно было установить значение для id, на помощь пришла рефлексия.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Another Reality
Цитата (Invis1ble @ 12.08.2016 - 16:32)
Ну вот один из последних примеров.
Есть доктриновская сущность, у неё есть поле protected $id, а сеттера нет. В одном из юнит-тестов нужно было установить значение для id, на помощь пришла рефлексия.

ОО, отличненько! Спасибо!
Сам вряд ли бы догадался.
Может еще что-то ? smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.