Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (5) 1 [2] 3 4 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Работа с исключениями и trigger_error
twin  
 ۩  Дата
Цитировать сообщение

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15560
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 1 день
Карма: 299

Трезвый :
5 лет, 11 месяцев, 11 дней


Цитата (Arh @ 29.10.2015 - 18:21)
Чё то читал, но там много букв =) Вкратце не получится?

Ага)) Тебе лень читать, а мне не лень переписывать?

Ну в двух словах. Если вызвать сразу штатный, то он покажет файл и линию того места, где брошено исключение. А именно в хандлере триггера. Это не интересно. По этому в наследнике я переопределяю эти свойства, и в отчете получается локация триггера, а не ексепшена. И видно то место, где вызван trigger_error(), то есть место ошибки.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

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

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



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




Так он вроде всё показывает, как debug_backtrace(), видно в каком месте throw был вызван и какое место вызвало функцию в которой был вызван throw итд до самого верха.


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

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15560
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 1 день
Карма: 299

Трезвый :
5 лет, 11 месяцев, 11 дней


Нет. Оно показывает от того места, где было брошено. А бросается оно всегда в одном месте. А значит место ошибки не видно. В месте ошибки стоит trigger_error, а не throw по моей схеме.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

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

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



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




Да не, я не про твою схему.
Я в принципе про то для чего делается свой класс наследник Exception на каждый случай?
Вот как Santehnick написал пример про InvalidParam.


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

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15560
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 1 день
Карма: 299

Трезвый :
5 лет, 11 месяцев, 11 дней


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


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

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

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



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




Это чтобы наследник InvalidParam мог что то сделать? Или зачем, непонимаю чем это:
try {
$var = example(1);
} catch (InvalidParam $e) {
echo '<br>Реагируем';
}


отличается от этого:
try {
$var = example(1);
} catch (Exception $e) {
echo '<br>Реагируем';
}


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

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15560
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 1 день
Карма: 299

Трезвый :
5 лет, 11 месяцев, 11 дней


Ну так в мануал то сходи. smile.gif

Блоков catch может быть несколько на один try И каждый на свое исключение.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

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

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



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2102
Пользователь №: 27172
На форуме: 5 лет, 8 месяцев, 3 дня
Карма: 70




Ок, завтра со свежей головой =)


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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 8 дней
Карма: 170




twin
Santehnick
Не о том спорите, тупо меряетесь письками.

Я приверженец исключений и вот почему (а не "ховно там кто-то написал"):
Мне удобнее писать, так же как и читать, последовательный код, "подразумевающий" отсутствие ошибок в вышестоящих операциях.

try {
... // много кода на доверии без проверок
}
catch( ExceptionTyp_1 $e) {
}

catch( ExceptionTyp_2 $e) {
}

.....
catch( ExceptionTyp_n $e) {
}



В варианте же twin весь "продуктивный" код будет перемешан с кучей if...else блоков
Ну а залогировать исключение или нет, это дело программиста, и автоматическое НЕлогирование исключений это сделано, на мой взгляд разработчиками специально.
Исключение можно кинуть не только ведь для ошибки, а и для ветвления логики. И к чему мне тут логирование?

Вот у меня одно приложение, работающее на двух разных базах. У одной базы расширили таблицу, у второй еще нет. В очереди на обновление стоит еще 52 клиента :) Мне не нужно логирование SQLException, мне нужна другая логика при этом исключении.
несомненно, можно полезть в системные таблицы, перечитать оттуда структуру пользовательских таблиц.. но это дофига лишего кода.

Вот один из очень важных клиентов, который захотел логировать все и вся...
user posted image
ГИГАБАЙТ логов за месяц!!!
Да кто там в этом копаться будет???


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

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



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

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 1 день
Карма: 40




Цитата (AllesKlar @ 29.10.2015 - 23:29)
Да кто там в этом копаться будет???

Твин laugh.gif


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

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

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15560
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 1 день
Карма: 299

Трезвый :
5 лет, 11 месяцев, 11 дней


В очередной раз убеждаюсь, какие же однобокие все таки вы, оопэшники biggrin.gif

Один тыркал меня иерархиями, а сам ими не пользуется, делает catch на каждый вызов. Чем это лучше if я так и не понял. Второй на доверии привык, пользутся ими слепо веря в свои силы и во всемогущество фреймворка. А значит все так же должны делать.

Даже между собой договориться не могут, как лучше.

Я сто раз повторил, что мой подход дает свободу выбора. Ну нравится AllesKlar на доверии - включи режим еxeption, и радуйся жизни. Равно как и Santehnick может сделать тоже самое.

А если кому то не нравится? Не хочет человек или не умеет? Вот допустим Arh уже несколько лет как написал свою CMS, а исключениями не пользуется. Почему вы решили, что все родились с эксепшеном в руке? Я пишу фреймворк для новичков, учебно-тренировочный. И опциональность там важна. А вы погрязли и заскорузли в своих привычках. Считаете что так, и только так это хорошо.

Вот если человек не станет оборачивать контекст в try... catch, скажите мне, что будет при вашей схеме? А вот что будет:
Цитата
Fatal error: Uncaught exception
Причем без без вариантов! Вы не даете никаких шансов, только ловить и обрабатывать ошибки.
А их не обробатывать надо, их надо исправлять.

А как же их исправить, коли ничего о них не известно? Что вы сделаете в этом catch полезного, если пользователь допустит ошибку? Вывалите 500 или 404? Сделаете оповещение админу на мыло? Тогда не логи гигабайтные будут, а почта. biggrin.gif biggrin.gif biggrin.gif

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

Вот покажите мне реальный ваш обработчик ошибок на ексепшенах. Именно ошибок, не исключительных ситуаций.

У меня вариантов масса. Такая схема позволяет просто переключить настройку и не плакать. Причем одним всего движением.

Вы упорно не хотите заметить того, что по моей схеме можно работать и как вы привыкли, и совсем по другому, как привык Arh. Она дает свободу выбора.

А все потому, что вам привили однобокость и зашоренность. Безальтернативность. Зажатость в рамки. Вы люди несвободные, не способные на нестандартные решения. Вы панически боитесь отступить хоть на полшага от общепринятых правил. Это называется "стадное чувство".


Цитата (AllesKlar @ 29.10.2015 - 19:29)
Ну а залогировать исключение или нет, это дело программиста, и автоматическое НЕлогирование исключений это сделано, на мой взгляд разработчиками специально.
Исключение можно кинуть не только ведь для ошибки, а и для ветвления логики. И к чему мне тут логирование?

Именно! Именно исключений. Ни кто не запретил использовать их в моей схеме совместно с trigger_error. Они очень славно уживаются, не мешая друг другу. Только триггер нужно использовать там, где возможна именно ошибка. При которой дальнейшая работа скрипта может привести к плачевным результатам. И которую нужно как можно скорее исправить. А для этого как можно скорее выловить. А как это сделать, если нихрена не логируется?

А там, где именно исключительная ситуация, свободно можно кинуть и эксепшен.

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

Цитата (AllesKlar @ 29.10.2015 - 19:29)
Вот один из очень важных клиентов, который захотел логировать все и вся...
Желание клиента - закон! Особенно если он очень важный. smile.gif
Цитата (AllesKlar @ 29.10.2015 - 19:29)
ГИГАБАЙТ логов за месяц!!!
Да кто там в этом копаться будет???

Какая тебе разница кто. Ему надо - дай. Не твое дело зачем. Тебе не надо, ни кто пока не отменил error_reporting.

Все таки скучно с вами. Все строем ходить норовите. smile.gif


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

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

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



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

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 8 дней
Карма: 170




twin
Какой ты интересный а, главное, увлекательный человек.
Вот тема есть, специально для тебя человек старался, писал, как нужно отвечать в постах Закон одного "почему".
Причем, я в своем ответе как бэ намекнул даже жирным шрифтом на это... ну да ладно.
Цитата (chee @ 29.10.2015 - 22:15)
Второй на доверии привык, пользутся ими слепо веря в свои силы и во всемогущество фреймворка

Кто сказал про фреймворк? Я вообще ниодного не знаю, уже писал об этом. Симфони колупаю для расширения кругозора.
Что значит "слепо веря в свои силы"?
Я написал "последовательный код, "подразумевающий" отсутствие ошибок в вышестоящих операциях."
А уж какие данные туда влетят и какую они кашу нагородят, вот этим и займется блок catch
И нравится он мне не потому что " А значит все так же должны делать. ", а потому что "Мне удобнее писать, так же как и читать, последовательный код".
Понимаешь? Чтобы в глазах не рябило от скобок.
Но это не значит, что я забил болта на отлов ошибок. Каждая по возможности поймана, обцелованна и направленна в необходимое ей место.
Это не значит, что весь код начинается с try{ и в нем целиком запихан.
Это значит, что блоки стоят в критических местах, а после них уже валидные данные.

Можно и с trigger_error(), а можно с исключениями, кому как удобнее.
Вот мне удобнее с исключениями и я описал почему

Твой же этот пост - это обертка к исключениям и у меня вопрос: а зачем?
А твоя реакция на ответы в этом посте - это как раз и есть то, в чем ты пытаешься обвинить приверженцев ООП.
Пока что тут никто не сказал, что trigger_error() не имеет права на жизнь, сказали, что он хуже, показали почему.
А ты с пеной у рта кинулся нас обвинять в еретизме.

Короче, можно долго кидаться друг в друга какашками, мое резюме - то, что ты написал - это обертка к исключением + симуляция исключений на уровне процедурного стиля. Я для себя в этом не вижу смысла, т.к. уже есть хорошо настроенный и работающий инструментарий.


Цитата
Вы не даете никаких шансов, только ловить и обрабатывать ошибки.

А другого варианта и не должно быть. Можно даже не пытаться переубедить меня, просто не должно и всё!

и да... error_reporting не отменяет логирование. Логирование будет в любом случае, только если в настройках сервера не запретить.



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

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



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15560
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 1 день
Карма: 299

Трезвый :
5 лет, 11 месяцев, 11 дней


Ну да, погорячился я с тобой. Просто попал под горячую руку, извини.

Дело в том, что тут речь шла именно о фреймворке. Причем паблик-фреймворке. Что использовать в нем. На клиентской стороне или в собственных разработках вопросов нет. Каждый волен делать что хочет. Потому ты и не видишь смысла в симуляции исключений.

А вот фреймворк на мой взгляд должен
1. Предоставить право выбора. Это гибкость.
2. Вести бортовой журнал. В самолетах есть же самописцы. Если нештатная ситуация с самолетом, потом смотрят что случилось. Действия пассажиров и стюардесс туда не пишутся. А действия летчика и процесс работы систем - обязательно.

А это сделать одними исключениями очень сложно, если возможно вообще. Для того я и сделал такую систему внутри фреймворка.

Ты привык пользоваться ексепшенами, не вопрос. Включил настройку и радуйся. Но большой брат следит за тобой))) Халява не пройдет. Накосячил, не получится свалить на фреймворк - там есть логи. Самописец работает.

А вот наоборот ситуация. Человек понятия не имеет об иерархиях. Да и вообще об исключениях. Начинает писать на фреймворке, а там бац - фатал еррор. Неотловленный ексепшен. Ну на кой ему это, если он Привет Мир хочет изобразить? К исключениям нужно плавно подводить, уж коли фреймворк задекларирован учебным.

Так что ни кто не меряется ни с кем. Просто Santehnick вбил себе в голову, что trigger_error устарел. А очевидной выгоды не видит. Вот и пытается меня в говнокоде обвинить, не понимая того, что сам то он как раз и пишет говнокод, когда ловит каждый вызов метода.


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

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

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



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 27 дней
Карма: 15




Цитата
когда ловит каждый вызов метода.

Удивительный человек. Сам себе что-то придумает и выдает за действительность.

Я просто переписал твой пример, это не означает, что я всё подряд оборачиваю в блоки try catch. Есть проекты где их нет, есть где встречаются 1-2 раза.

Это ты решил, что все исключения нужно обязательно отлавливать. Не я. В проекте много сторонних библиотек (не мной написаных) и все кидают исключения, отловить в них все исключения и обработать - невозможно, не нужно и совершенно глупо.

Я просто знаю, что при непойманом исключении будет 500 Internal server error. Пользователь увидит это

user posted image

Пользователь не увидит это
Цитата
Fatal error: Uncaught exception


Веб-сервер запишет в access.log и error.log сообщение о 500 Internal server error. Я прочитаю эти логи с помощью https://www.loggly.com/ (или другой тулзой). Из этих логов пойму, как воспроизвести ошибку. Разберусь почему она возникает. Сделаю фикс. Напишу на фикс юнит-тест. Всё, континиус интегрейшен и следующая итерация.

Цитата
А их не обробатывать надо, их надо исправлять.

Верно. Мы почитали логи веб-сервера, разобрались, исправили, написали тест и уверены, что исключение здесь больше не появится. Мы его не обрабатываем, если это именно ошибка в логике работы программы.

Всё что я писал, было лишь попыткой объяснить тебе, что исключения, это просто более мощный, более современный механизм, чем trigger_error. Можешь почитать гугл, php.net и stackowerflow на эту тему. Посмотреть код популярных проектов. Подумать еще раз. И возможно, сделать выводы.

Ну а если нет, ок, мне честно говоря пофигу как ты пишешь, просто жаль твоих учеников, потому что возможно мне придется после них, включать навык "умение разбираться в коде" )

Непонятно как спецификация ECMAscript дожила уже до 6 релиза без trigger_error и почему V8 бросает исключения вместо (!внимание) trigger_error (или подобного древнего говна). Давайте накажем разработчиков гугл, ведь twin умнее их всех вместе взятых.

// V8 Javascript engine
func(); //Uncaught ReferenceError: func is not defined

Товарищ, вам тут гугл throw сделал )

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

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



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 8 месяцев, 27 дней
Карма: 15




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

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

Опции темыСтраницы: (5) 1 [2] 3 4 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса