Короткая форма If

newARTix

Новичок
LONGMAN
дык на isset я никакой оберткой проверить не могу :( Иногда нужно из GET, иногда из POST, а иной раз и SESSION, COOKIE. Если писать обертку для всего этого, получается еще хуже.
 

Духовность™

Продвинутый новичок
Иногда нужно из GET, иногда из POST, а иной раз и SESSION, COOKIE. Если писать обертку для всего этого, получается еще хуже.
шо ви говорите?

Вот моя обертка (не полная) http://pastebin.com/DAPM4c1P

Очень удобно работать:

PHP:
$id_region = $get_search
                     ? $this->getRequest()->getGet('id_region', 'decimal')
                     : $this->getRequest()->getCookie('id_region', 'decimal');

if ($id = $this->getRequest()->getRequest('id'))
{
    // ...
и никаких гвоздей!
 

cDLEON

Онанист РНРСlub
triumvirat
а что если на входе в гет у меня лежит массив? ) Тогда что делать прикажете? )
PHP:
$my_array=$this->getRequest()->getGet('my_array','array');
if(isset($my_array['blablabla']['blablabla'])) {
 echo 'о_О';
}
 

newARTix

Новичок
triumvirat
это вы называете более удобным, кратким или "правильным" решением чем просто isset($_GET['var'])?$_GET['var']:null? я что-то не понимаю :) В чем удобство? Выглядит более ООПно, это да, согласен :)

Вообще пару раз пробовал заюзать обертку типа этой... и оба раза пришел к выводу что для работы с массивами GPFCS она нафиг не нужна. А мания некоторых разработчиков в своих системах обязательно делать подобную обертку и убирать из глобальной области видимости исходные массивы (sick!) вообще бесит.
 

FB3

Новичок
Автор оригинала: newARTix
Резко захотелось перейти на эту ветку :)
Мне уже давно хочется перейти на эту ветку хотя бы из-за позднего статического связывания. Но пока не удалось убедить людей, что нужно поставить 5.3 вместо 5.2, которая входит в стандартную поставку РедХата (или что там у нас стоит, точно не помню). Типа, если производитель дистрибутива 5.3 не положил в дистрибутив, значит не стоит считать его достаточно стабильным. Я считаю стабильным релизы PHP через месяц-другой после выхода, а то пару раз было, что критические патчи выходили.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вот поэтому счастливые пользователи убунты давно имеют 5.3 искаропки. =) Более того, есть даже ppa с поддержкой php-fpm )
 

Духовность™

Продвинутый новичок
а что если на входе в гет у меня лежит массив? ) Тогда что делать прикажете? )
Вообще, твой вопрос плавно переходит в сторону объектного массива (http://community.livejournal.com/ru_php/1495679.html) и убогости реализации массивов-хэшей в PHP. Тут была тема, на меня все орали, что я не прав. Хотя я прав.
Всё работает:
PHP:
Http_Request::getInstance()->getRequest()->a = array('b' => array('key' => 2));

echo (int)isset(Http_Request::getInstance()->getRequest()->a['b']['key']); // или
echo (int)isset(Http_Request::getInstance()->getRequest()->a->b->key); // или
echo (int)isset(Http_Request::getInstance()->getRequest('a')); // так нельзя
echo (int)isset(Http_Request::getInstance()->getRequest('a')->b); // так можно
echo (int)isset(Http_Request::getInstance()->getRequest('a')->b['key']); // и даже так можно
В чем удобство?
в том, что если я пишу $this->getRequest()->getGet('id_region'), то мне гарантированно будет возвращено значение. Это и есть УДОБСТВО. Именно для таких вещей и пишутся обертки. Это обертка над объектом запроса. Соответственно, она обладает иными функциями, о которых знают только избранные, вроде меня.
 

newARTix

Новичок
triumvirat
неправильно сформулировал, в чем преимущество перед isset($_GET['var'])?$_GET['var']:'default'?
Учитывая что ваша обертка накладывает ограничения, требует ознакомления с принципами ее работы, и как по мне, нарушает принцип KISS.
Костыли с объектными массивами мне тоже непонятны, в смысле их преимущества.

Хотя мы уже настолько ушли от темы... что начали повторять другую... мне лично всё ясно :)
 

john.brown

просто кулибин
newARTix
ну, нет, triumvirat прав - в какой то момент заебывает писать бесконечные isset($_GET['var'])?$_GET['var']:'default', и хочется написать это один раз, и навсегда :) А потом надоедает писать if(is_numeric($_GET['var']))..., и добавляеш все эти проверки туда же... и, о чудо, жизнь становится легкой и прекрасной....
 

fixxxer

К.О.
Партнер клуба
многабукв

$this->Request->Post->MyArray->get('my_key', 'default')

если чего-то нет - возвращаем null-object соответствующего интерфейса (тут, впрочем, есть неудобства, ввиду отсутствия чего-то вроде __toScalar() по аналогии с __toString; но в итоге все равно ифов меньше).
 

newARTix

Новичок
john.brown
я не могу никак уловить, какая разница писать
isset($_GET['var'])?$_GET['var']:'default'
или
$this->getRequest()->getGet('var','default');
букав даже больше.
В чем преимущество, вы можете объяснить? На нумерик ведь не все переменные надо проверять, это еще один параметр в метод, еще одна занятая ячейка памяти в моих мозгах (и в компе), так и какая разница-то?

Тут фишка в чем, если переходить к объектным массивам, то переходить полностью, везде в приложении. Только тогда получается какое-то удобство, однообразие, читаемость. А если "тут у нас доступ через геттер, а вот тут итератор, а этот интерфейс генерит дефолтное значение, а вот этот может фильтровать если указать параметр, а этот по старинке возвращает обычный массив", то мне придется постоянно держать все эти варианты в голове. Да ну его нафиг. У меня везде либо массив, либо блин объект. Всё. И сплю я спокойно.
 

whirlwind

TDD infected, paranoid
Как меня радуют аргументы в виде количестве букаф. Особенно когда их считают в одной строке. В перл-гольф играть не пробовали?
 

john.brown

просто кулибин
newARTix

если уж по количеству букафф, то в моем случае экономим почти два раза :)

PHP:
$id = (isset($_REQUEST['id']) && is_numeric($_REQUEST['id']))? $_REQUEST['id'] : NULL;
$id = $this->api->request->getNumeric('id');
Но даже это не столь важно, как сказал whirlwind. Более важно то, что не приходится постоянно повторять одинаковые логические построения. Лично меня это болше убивает, чем количество букафф.

п.с. is_numeric() просто как пример был, хотя, надо признать, самый ходовой. так же регулярно приходится проверять на alpha и alphanum, для чего тоже есть соотв. методы :)
 

whirlwind

TDD infected, paranoid
john.brown у меня точно так же. Только экономия еще больше при большом объеме данных

PHP:
$request = $this->context->getRequest();
$this->toModel('Quantity', $request->getInt('Quantity'));
$this->toModel('BonusQuantity', $request->getInt('BonusQuantity'));
$this->toModel('Price', $request->getNum('Price'));
$this->toModel('Enabled', $request->hasVar('Enabled'));
 

флоппик

promotor fidei
Команда форума
Партнер клуба
я лох просто:
PHP:
if($request->process($url, $model->scheme)) {
    $model->setup($request->data);
}
 

newARTix

Новичок
Хватит, остановитесь! Вы взорвете мне мозг! "Спрячьте под кат!"

Все видят только то что хотят видеть :) большая часть моего посыла не про кол-во букв, а про то что вы как раз продемонстрировали. Чтобы работать с вашим кодом, я должен каждому из вас залезть в голову. Оно мне надо?

А вот вариант fixxxer зрит в корень.
 

john.brown

просто кулибин
Ну, во первых, ты должен не нам в голову залезть, а, наверно, в доку к классу реквеста :)
А вариант fixxxer, конечно, зрит, но это не отменяет проверки на из_сет, и.т.д. Оно, собственно, следующий уровнь абстракции...
 
Сверху