Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

рефлексия константы в параметрах php

312
22 февраля 2012 года
dead_star
392 / / 26.11.2006
ситуация такая. через рефлексию разбираю класс и на основе собранных данных формирую фабричный метод
обнаружил потонциальный баг
метод ReflectionParameter::getDefaultValue возвращает только значение
но может быть такое что конструктору класса в параметрах будит передана константа, своего или чужого класса и в значении мы получим значение константы

 
Код:
class Test {

    const MY_VAR = 100500;

    public function __construct($param = self::MY_VAR) {
    }

}

вызов ReflectionParameter::getDefaultValue для параметра $param вернет 100500
получается если мы на основе таких данных сформируем фабричный метод, а потом изменим значение константы то значения устанавливаемые по умолчанию будут отличатся

единственный метод решения проблемы который я вижу это разбирать параметры через регулярку
12
23 февраля 2012 года
alekciy
3.0K / / 13.12.2005
>получается если мы на основе таких данных сформируем фабричный метод, а потом изменим значение константы то
>значения устанавливаемые по умолчанию будут отличатся

Ну и в чем проблема-то? Сформируй фабричный метод еще раз.

P.S. А с патернами лучше этого того... завязывать. А то можно заработать паттерн головного мозга.
312
24 февраля 2012 года
dead_star
392 / / 26.11.2006
Цитата: alekciy
Ну и в чем проблема-то? Сформируй фабричный метод еще раз.


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

 
Код:
class Plugin_Test {
    public function __construct($key = Model_Users::PRIMARY) {
    $this->user_primary_key = $key;
    }
}


предположим у нас есть плагин связанный с моделью Users и для работы ему необходимо название поля по которому он потом будет делать выборку(это как пример) и по умолчанию он берет название первичного ключа объявленный в константе модели
на лицо зависимость плагина от модели
и если мы изменим имя первичного ключа в модели то плагин никак не изменится и будит работать по прежнему, а вот экземпляр плагина созданный фабричным методом будит сломан
и обнаружение подобной ошибки потребует не мало времени
с какой-то стороны это проблема разработчика плагина, что он написал такую зависимость
но это не значит что мы должны игнорировать эту проблему
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог