Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Применение Reflection
Another Reality  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 19 дней
Карма: 5




Всем привет!

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

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

$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();

Вопрос - в чем изюм ?
Пока что, очевидно только то, что первый вариант более оопешный.
Делитесь опытом, где применяете ?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2605
Пользователь №: 5568
На форуме: 8 лет, 4 месяца, 27 дней
Карма: 30




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

Ну и посмотри на список методов класса ReflectionClass, а там уже используй то, что тебе нравится. smile.gif
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 19 дней
Карма: 5




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

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

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

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

Хотелось бы каких-то реальных прмеров использования.

Это сообщение отредактировал Another Reality - 12.08.2016 - 15:21
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2605
Пользователь №: 5568
На форуме: 8 лет, 4 месяца, 27 дней
Карма: 30




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


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

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

https://github.com/yiisoft/yii/search?utf8=...ReflectionClass
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 19 дней
Карма: 5




Цитата (jetistyum @ 12.08.2016 - 15:27)

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

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

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

Это сообщение отредактировал Another Reality - 12.08.2016 - 16:04
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 19 дней
Карма: 5




Кое-что интересное нашел, такой себе эффектный метод восстановить дефолтное значение поля:

if($this->_basePath===null)
{
$class=new ReflectionClass(get_class($this));
$this->_basePath=dirname($class->getFileName());
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2605
Пользователь №: 5568
На форуме: 8 лет, 4 месяца, 27 дней
Карма: 30




Цитата (Another Reality @ 12.08.2016 - 15:04)
Не, ты не понял. Я не имел ввиду пример кода.

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

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

PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11786
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 12 дней
Карма: 429

Трезвый :
7 лет, 3 месяца, 12 дней


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


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Another Reality  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Старик
***

Профиль
Группа: Пользователь
Сообщений: 124
Пользователь №: 41606
На форуме: 1 год, 4 месяца, 19 дней
Карма: 5




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

ОО, отличненько! Спасибо!
Сам вряд ли бы догадался.
Может еще что-то ? smile.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса