Вот как раз в этом куске кода, что бросил сюда из своего прожекта, этот параметр вообщем-то не и нужен - все это длается именно в фильтре(у меня куча различных фильтров на каждый тип данных со своими фишками ), по нему уже определяем какой типа нам нужен, и если к примеру нам нужен инт или флоат, а получаем строку, то можем выкинуть и UnexpectedValueException, если захотим. Или постараемся преобразовать ;)
Я бы правда вынес нотис за грани эксепшна и проверял, что это нотис на уровне call-back-а (как вариант кидать NoticeException ;) ) и как-нибудь его выводил, хоть одной строкой, тут уже все равно.
Про лямду в курсе, только вот пока до нее еще очень далеко. PHP 5.3 - это вообще другой язык, и неймспейсы, замыкания, может быть даже нормальный тайп хинтинг, traits... Но это все реально, к сожелению, очень далеко :(
Получил, как и ожидал: exception 'MyException' with message 'Undefined index: b' in D:\Web\home\localhost\htdocs\dev\Nano\index.php:45 Stack trace: #0 D:\Web\home\localhost\htdocs\dev\Nano\index.php(45): __lambda_func(8, 'Undefined index...', 'D:\Web\home\loc...', 45, Array) #1 {main}
Правда у меня нотисы я все таки выкинул, с помощью switch($errno), на E_NOTICE... так спокойнее.
Что-то вроде того, но я говорил о немного другом уровне, например таком:
class Request {
 l lpublic function getQueryParam($name, Filter $filter, $default = null) {
 l l l lif(isset($_GET[$name])) {
 l l l l l lreturn ($filter)? $filter->apply($name) : $_GET[$name];
 l l l l}
 l l l lelse {
 l l l l l lreturn $default;
 l l l l} l l l
 l l}
 l l//...
}
Фильтры кстати тоже пишутся за час-два до приемлимого уровня ;)
Видел я один раз код такого ленивого програмера. Что еще хуже я сидел и около 2-х часов пытался найти в чем же там проблема, почему ничего не работает через раз и почему мне об этом ничего даже не сообщаеца. Проблема решилась за две минуты, как только я убрал собаку из вызова одной функции.
да, варнингы во многих фукнциях, если что-то идет не так, раздражают. Очень. Но когда ты девелопишь, они в тоже время очень сильно тебе помогают. Потому как я сейчас не могу вспомнить ни одного случая когда варнинг был мог бы присутсвовать в нормальной ситуации.
А про забитие на кавычки в массивах и isset при проверке входящих данных(который вообще пишется только один раз и помещается в какой-нибудь компонент работаютщий) - за это, извините, но надо избивать. Причем до тех пор, пока человек не поймет, что если он будет писать номральный грамотный и читаемый код, который сам ему подскажет что к чему - то он так и будет тратить 80% своего времени заниямась рутинным кодингом.
Деньги. Главная проблема. Столько всего можно иметь и уже сейчас с такими штуками как интернеты и мобильные телефоны, доступ к своим данным(контактам, фоткам, записям в блоге... все равно где они находятся, все равно где лежат) с любого устройства через любой интерфейс поддерижвающий некий апи(ну или что-то вроде того), но... все хотят денег, иметь миллион пользователей и получать с этого две тыще баксов в месяц - нельзя, как же так, мы же _настолько_ популярны!
Поэтому мы и имеем сотни искусственных ограничений направленых на то, тыщщу разных сервисов и десятки путей решения проблемы, и все только для того, что бы пользоваель матерился, рвал на себе волосы и тихо мечтал о том что скоро... еще чуть чуть и все изменица... и платил деньги.
Думаю что если бы человечество было лишено этой мании денег, то мы бы сейчас в дветыще восьмом году уже общались бы просто с другими цивилазациями и получили статус самых умных и развитых в ближайшей сотне галактик.
А подмысль моего коммента в том, что 5% зенда - это его только его корка, со всеми базовыми вещами типа контролеров, роутингов, енвиронмента и вью. Если нужно из него только это - то он бессмыслен, так как все это есть и более плотно интегрировано (и быстрее работает) в куче других фреймворках. Если нужно уже нормально с бд работать, фидами, мыло посылать, авторизацию, кеширование, с формами работать - то это уже гораздо больше чем 5% процентов ;) И использовать зенд - не такая уж и плохая идея.
А фреймворк он на то ифреймвор, чтоб быть в основе. А искать каждый раз новую основу для нового проека - действительно полный бред.
Смотря что нужно от фреймворка. Зенд - отличнейший конструктор, который при желании позволит тебе очень многое. И его врядли можно упрекнуть в нелогичности.
А если из зенда нужно вырезать практически все - то стоит задуматся о том, что он в данном случае и не нужен вовсе.
Почему за семантику должны еще и платить?
Почему заказчик вообще должен знать что такое эта "семантика"?
Почему нельзя просто взять и качественно и грамотно выполнить работу, а не ныть "а мне за это не плааатят", после забывая об этом заказчике как о кошмарном сне?
Почему так трудно понять, что если тебя все устраивает(деньги, время, сабжект работы) то ты берешься за работу, если нет - то от нее можно всегда отказаца?
Вот как раз в этом куске кода, что бросил сюда из своего прожекта, этот параметр вообщем-то не и нужен - все это длается именно в фильтре(у меня куча различных фильтров на каждый тип данных со своими фишками ), по нему уже определяем какой типа нам нужен, и если к примеру нам нужен инт или флоат, а получаем строку, то можем выкинуть и UnexpectedValueException, если захотим. Или постараемся преобразовать ;)
На set_exception_handler(), что нибудь накинули?
Я бы правда вынес нотис за грани эксепшна и проверял, что это нотис на уровне call-back-а (как вариант кидать NoticeException ;) ) и как-нибудь его выводил, хоть одной строкой, тут уже все равно.
Скопировал ваш код, запустил:
try {
$_POST['b'];
}
catch (Exception $e) {
echo $e;
}
Получил, как и ожидал: exception 'MyException' with message 'Undefined index: b' in D:\Web\home\localhost\htdocs\dev\Nano\index.php:45 Stack trace: #0 D:\Web\home\localhost\htdocs\dev\Nano\index.php(45): __lambda_func(8, 'Undefined index...', 'D:\Web\home\loc...', 45, Array) #1 {main}
Правда у меня нотисы я все таки выкинул, с помощью switch($errno), на E_NOTICE... так спокойнее.
Да и смысл всего этого действа, ведь на E_ALL, эксепшн вылезет даже там, где будет кинут простой notice.
И кстати. Ошибки и исключения - это разные механизмы.
class Request {
 l lpublic function getQueryParam($name, Filter $filter, $default = null) {
 l l l lif(isset($_GET[$name])) {
 l l l l l lreturn ($filter)? $filter->apply($name) : $_GET[$name];
 l l l l}
 l l l lelse {
 l l l l l lreturn $default;
 l l l l} l l l
 l l}
 l l//...
}
Фильтры кстати тоже пишутся за час-два до приемлимого уровня ;)
да, варнингы во многих фукнциях, если что-то идет не так, раздражают. Очень. Но когда ты девелопишь, они в тоже время очень сильно тебе помогают. Потому как я сейчас не могу вспомнить ни одного случая когда варнинг был мог бы присутсвовать в нормальной ситуации.
А про забитие на кавычки в массивах и isset при проверке входящих данных(который вообще пишется только один раз и помещается в какой-нибудь компонент работаютщий) - за это, извините, но надо избивать. Причем до тех пор, пока человек не поймет, что если он будет писать номральный грамотный и читаемый код, который сам ему подскажет что к чему - то он так и будет тратить 80% своего времени заниямась рутинным кодингом.
Поэтому мы и имеем сотни искусственных ограничений направленых на то, тыщщу разных сервисов и десятки путей решения проблемы, и все только для того, что бы пользоваель матерился, рвал на себе волосы и тихо мечтал о том что скоро... еще чуть чуть и все изменица... и платил деньги.
Думаю что если бы человечество было лишено этой мании денег, то мы бы сейчас в дветыще восьмом году уже общались бы просто с другими цивилазациями и получили статус самых умных и развитых в ближайшей сотне галактик.
А подмысль моего коммента в том, что 5% зенда - это его только его корка, со всеми базовыми вещами типа контролеров, роутингов, енвиронмента и вью. Если нужно из него только это - то он бессмыслен, так как все это есть и более плотно интегрировано (и быстрее работает) в куче других фреймворках. Если нужно уже нормально с бд работать, фидами, мыло посылать, авторизацию, кеширование, с формами работать - то это уже гораздо больше чем 5% процентов ;) И использовать зенд - не такая уж и плохая идея.
А фреймворк он на то ифреймвор, чтоб быть в основе. А искать каждый раз новую основу для нового проека - действительно полный бред.
А если из зенда нужно вырезать практически все - то стоит задуматся о том, что он в данном случае и не нужен вовсе.
Почему заказчик вообще должен знать что такое эта "семантика"?
Почему нельзя просто взять и качественно и грамотно выполнить работу, а не ныть "а мне за это не плааатят", после забывая об этом заказчике как о кошмарном сне?
Почему так трудно понять, что если тебя все устраивает(деньги, время, сабжект работы) то ты берешься за работу, если нет - то от нее можно всегда отказаца?