Цитата (waldicom @ 28.10.2015 - 13:41) |
Тот факт, что при неудачном коннекте к БД юзер уже не сможет ничего сделать, тебя не особо волнует? |
Нет, не волнует. Меня больше волнует, что он все-таки сможет что-то сделать. И это "что-то" может принести плачевный результат.
Допустим пользователь не отловил какое то исключение. Что мы видим на экране?
Цитата |
Fatal error: Uncaught exception |
А дальше самое интересное - вся структура с путями и названиями. Кому это полезно, посетителю? Его это только напугает. И это удар поддых фреймворку. Потому что скажут потом, что ваш фреймворк нифига не работает, сыпет ошибки. Хотя ошибки эти пользователя, а не фреймворка.
И как тут быть?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
В моем случае есть три варианта настроек.
1. Режим дебаггинга. Все trigger_error преобразуются в исключения.
2. Режим 500. На экране ошибка сервера, она логируется, скрипт останавливается.
3. Для продвинутых - отключение trigger_error. При этом можно пользоваться собственными эксепшенами, но ошибки все равно будут слогированы.
В вашем случае - только один. Ловить исключения и бороться с ними.
А если это новичек, который возомнил себя гуру? Он не станет писать логов. Он же крут и без них. Он просто попытается по вашим советам
обрабатывать ошибки. А это может привести к непредсказунмым результатом. И никаких следов. Шито-крыто.
Да что там новичек. И на старуху бывает проруха. Чем же все же круче внутренние эксепшены, объясните без эмоций. Я пока вижу только минусы.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
waldicom
28.10.2015 - 17:58
Цитата (twin @ 28.10.2015 - 14:50) |
Нет, не волнует. Меня больше волнует, что он все-таки сможет что-то сделать. И это "что-то" может принести плачевный результат.
|
повторюсь:
Цитата |
Не надо забывать, что ты пишешь фреймворк, а не страничку своему работодателю, с которой только ты один работаешь. Твой фреймворк будут использовать миллионы, подумай о них, а не о себе. |
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Я о них и думаю как раз. На мой взгляд свобода выбора гораздо лучше рамок. В моем случае эксепшены не возбраняются. Только на стороне пользователя. Вы же эти миллионы загоняете в угол, не давая возможности выбора. С внутренними эксепшенами такой как у меня финт сделать гораздо сложнее. Я пытаюсь конечно, раз нужно соответствовать. Только вот не пойму, ради чего?
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (Oyeme @ 28.10.2015 - 12:45) |
Попадает под Ваше описание. |
Угу. Мирового порядка захотелось. Был один с усиками, который пытался его установить
Вот пожалуйста, столкнулся с проблемой этого вашего порядка. Делаю сейчас дебаггер SQL. С mysqli проблем особых не возникло. С PDO тоже по образу и подобию. Все работает на ура (внизу картинка).
Живи и радуйся вроде. Но тут вдруг откуда не возмись ваш порядок. Разрабы PDO обо мне "позаботились". Исключение кинули. Я теперь могу вывести на экран только заведомо правильный запрос, без ошибок синтаксиса. В противном случае медвежья услуга - исключение. А на кой мне в дебаггере правильный запрос? Вся фишка в том, чтобы посмотреть на ошибочный.
Вот как мне быть? Класс отнаследован от PDO. Отловить в потомке я его не могу, оно выше бросается, в родителе. Вокруг вызова тоже не могу, ибо вызов на стороне пользователя, а ошибка мне нужна в дебаггере. И что? Полезно это мне?
Эксепшен - чисто пользовательская фишка. Когда его бросает система, один только вред.
Зато порядок, все строем ходим.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Twin, Вот простой ajax запрос на получение данных и запрос отвалился с ошибкой. Как будете отлавливать? Используя trigger error? Что получит в этом случае json?
И по Вашему вопросу, сначало определитесь с уровнями исключений и ловите их на каждых уровнях по своему.
У меня все exceptions логируются и мне приходит сразу же смс если скажем что-то с критическое если просто warning то просто мэйл . Это стандартная практика записывать логи.
Соответственно с фаталами вы уже работает на самом высоком уровне и там тоже прикручен логгер.
Вот Вы написали скажем какой-то сервис или библиотеку и мне нужно её использовать и тут Ваша библиотека получает объект вместо строки и библиотека Вываливается с ошибкой.
У меня же прикручена логика если не работает ваш сервис то использовать другой.
Это стандартная практика когда какой-то сервис не работает а нужно использовать другой(может timeout)
В вашем же случаи я сломаю свою систему вашем trigger error который выдаст мне белый экран.
Надеюсь вам теперь понятно почему triggers errors ужасный говно код на высоких очень уровнях.
Что является вообще типичным быдлом кодом
Invis1ble
28.10.2015 - 21:20
Помню как-то раз пришлось парсить текст нативного php-шного warning'а дабы понять, что конкретно произошло, и в определенном случае переключиться на альтернативный сценарий. Очень "рад" был такому положению дел.
Жаль сейчас не могу найти сей эпичный костыль.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Цитата (Oyeme @ 28.10.2015 - 17:00) |
Twin, Вот простой ajax запрос на получение данных и запрос отвалился с ошибкой. Как будете отлавливать? Используя trigger error? Что получит в этом случае json? |
Почему этим должен заниматься фреймворк, я не пойму. Это пользователя забота, реагировать на ошибки. Фреймворк должен вернуть либо json, либо false. Если неудача, пользователь пусть бросает сколько угодно исключений. И строит свои иерархии. Его право. В случае с trigger_error это не помеха вовсе.
Цитата (Oyeme @ 28.10.2015 - 17:00) |
И по Вашему вопросу, сначало определитесь с уровнями исключений и ловите их на каждых уровнях по своему |
Вопрос не в том, как ловить. Вопрос где. Но я решил уже эту проблему. Костыльно наверное, но решил.
Цитата (Oyeme @ 28.10.2015 - 17:00) |
В вашем же случаи я сломаю свою систему вашем trigger error который выдаст мне белый экран. |
Не выдаст. Почему он должен выдать то? Если включен режим 500, то выдаст 500. Если не включен, ничего не выдаст, продолжит дальше. И бросай, и лови исключения сколько влезет. Но только на пользовательской стороне. При этом в лог все равно все запишется.
Ты внимательно смотрел код, я два раза уже повторил его. В третий раз повторю, мне не лень:
public function strtolowerUTF8($var = null)
{
if (!is_string($var)) {
@trigger_error('это не строка');
return false;
}
return mb_strtolower($var, 'utf-8');
}
Обрати внимание на собачку. Да, это тоже нарушение ваших правил, но зато сколько профита в этом. Кастомный хэндлер их ловит. Лог работает. На экран ничего не лезет. Скрипт выдает логические результаты, которые в сто раз легче обрабатывать, нежели исключения. Есть выбор режимов. Можно превратить их в исключения (правда без иерархий), можно отреагировать 500, можно вообще ничего не делать, и работать с эксепшенами или простой логикой на клиентской стороне.
Если дальше развивать тему, можно в обработчик передавать свои коды, и на их основе создать иерархию исключений. Тогда вообще будут все довольны. Как передать локацию, я уже показывал.
А что у вас?
Цитата (Oyeme @ 28.10.2015 - 17:00) |
Надеюсь вам теперь понятно почему triggers errors ужасный говно код на высоких очень уровнях. |
Нет. Ничего не понятно. Давай еще раз.
Имеем фреймворк. Он бросает исключения. Пользователь их должен ловить.
1. Если пользователь отловит не все исключения, что будет?
2. Ecли пользователь не реализует логер, что будет?
3. Если пользователь захочет сделать свою иерархию, как?
4. Как реализовать обычную логику, основываясь на try... catch? А чего не на GOTO сразу? С ним проще как раз, там хоть локация указывается, куда смотреть.
Единственны аргумент я пока слышу, это то, что я делаю не как все. А это очень слабый аргумент. Стремящийся к нулю.
Цитата (Invis1ble @ 28.10.2015 - 17:20) |
Помню как-то раз пришлось парсить текст нативного php-шного warning'а дабы понять, что конкретно произошло, и в определенном случае переключиться на альтернативный сценарий. Очень "рад" был такому положению дел. Жаль сейчас не могу найти сей эпичный костыль. |
Очень жаль, что не можешь))) Только это не PHP виноват, а твой скрипт, раз тебе пришлось парсить нативный варнинг. Не так много там вариантов, чтобы не сделать цепочку проверок.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.