Объясните что такое исключения на простом и понятном примере

Solomon Kane

Постоялец
Регистрация
26 Авг 2009
Сообщения
144
Реакции
9
Мистика какая-то, почти во все определения и их функционирование ООП на PHP въехал, а исключения понять не могу. Смотрю в книгу, вижу фигу. В своё время так с конструктором было, вроде даже тут тему создавал. Кто-то может привести нормальный пример с объяснением человеческим языком, зачем это вообще надо? Под "нормальным" имеется в виду пример, который часто встречается на практике, а не так, как любят авторы учебников взять какой-то бред, который в реальных программах вообще не встречается, и начать на основе этого бреда строить всю главу.

Спасибо!
 

Или вы хотите увидеть как это работает в каком нить распространенном пхп приложении?
 
Оно, но не могу въехать в принцип работы и вообще в суть - зачем это надо? Если быть точнее, вопроса глобальных три - зачем это надо, если есть if else и прочее? Как точно это работает? Есть ли какой-то простой конкретный пример, после которого даже обезьяна поймёт, как надо использовать исключения :).
 
PHP:
<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    else return 1/$x;
}

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';
?>
 
Очень простой пример:
Представь, что мы селектим из БД и ожидаем получить 1 строку. Ровно 1 строку.

Но так получается, что БД заполнена не правильно заполнена и в результате получается или ноль значений или более одного. Это - исключительная ситуация, которую разработчик не ожидал. Поэтому надо обрабатывать такие вещи
 
Мистика какая-то, почти во все определения и их функционирование ООП на PHP въехал, а исключения понять не могу. Смотрю в книгу, вижу фигу. В своё время так с конструктором было, вроде даже тут тему создавал. Кто-то может привести нормальный пример с объяснением человеческим языком, зачем это вообще надо? Под "нормальным" имеется в виду пример, который часто встречается на практике, а не так, как любят авторы учебников взять какой-то бред, который в реальных программах вообще не встречается, и начать на основе этого бреда строить всю главу.
Спасибо!

исключение это экземпляр класса содержащий подробности возникновения ошибки, стек возникновения + описание ошибки... вообще лучше без необходимости их не использовать вообще, выброс исключения требует время... при частом использовании это накладно... ну пример уже писали выше (в нем также можно обойтись без использования исключений)
 
Оно, но не могу въехать в принцип работы и вообще в суть - зачем это надо? Если быть точнее, вопроса глобальных три - зачем это надо, если есть if else и прочее? Как точно это работает? Есть ли какой-то простой конкретный пример, после которого даже обезьяна поймёт, как надо использовать исключения :).
Исключения - это инструмент для Единой обработки ошибок. И в больших проектах лучше использовать его. И Не пихать во всё что движется. Большое время обработки- бред незнающих. Наверно когда юзер отправил неверную информацию через форму, ломанулся в закрытый раздел или когда падает база, НУ ОЧЕНЬ большое значение играет 0.02 секунды, затраченное на скрипт.
Что до как применять- это как в основном с ооп - в маленьких проектах сложно понять, но вот в больших становится ясно- Со всеми if else и своими функциями типо error_alert() - ты запутаешься, рано или поздно.
+ полезно
 
Исключения - это инструмент для Единой обработки ошибок. И в больших проектах лучше использовать его. И Не пихать во всё что движется. Большое время обработки- бред незнающих. Наверно когда юзер отправил неверную информацию через форму, ломанулся в закрытый раздел или когда падает база, НУ ОЧЕНЬ большое значение играет 0.02 секунды, затраченное на скрипт.
Что до как применять- это как в основном с ооп - в маленьких проектах сложно понять, но вот в больших становится ясно- Со всеми if else и своими функциями типо error_alert() - ты запутаешься, рано или поздно.
+ полезно
*** скрытое содержание ***
"бред незнающих", а будет вам известно что 0,02 секунды это довольно большое время (имеется ввиду системное) и как у меня написано выше, при частом использовании это время тупо умножается на количество раз (выброс исключение не означает прекращении выполнения кода), вы кем работаете уважаемый, что делаете вывод о знающих и не знающих и где увидели бред? Каким образом запутаетесь с if рано или поздно :) откуда такое утверждение, сама формулировка в начале о единой инструменте и рекомендация к использовании так как без этого никуда мне говорит о том, что не знающий все таки вы...
 
"бред незнающих", а будет вам известно что 0,02 секунды это довольно большое время (имеется ввиду системное) и как у меня написано выше, при частом использовании это время тупо умножается на количество раз, вы кем работаете уважаемый, что делаете вывод о знающих и не знающих и где увидели бред? Каким образом запутаетесь с if рано или поздно :) откуда такое утверждение, сама формулировка в начале о единой инструменте и рекомендация к использовании так как без этого никуда мне говорит о том, что всезнающий все таки вы...
Я имел ввиду что отказываться от исключений или критиковать их потому что они медлительны - это глупо. Я как раз имею ввиду что это инструмент, и как всякий инструмент должен применяться там где нужно и как нужно.

Термин "бред незнающих" - это значит что человек который хоть и что-то понимает в преимуществах и недостатках того или иного метода, делает выводы только на недостатках того, что ему не нравится. к примеру то же Исключение- оно медленное и генерирует кучу инфы, которая не нужна всегда за исключением масштабных ошибок вроде в sql запросах (очень часто достаточно одного текста).
Наверно когда юзер отправил неверную информацию через форму, ломанулся в закрытый раздел или когда падает база, НУ ОЧЕНЬ большое значение играет 0.02 секунды, затраченное на скрипт.
Но по сравнению с общим трафиком, который будет на сайте, трафик ошибок, которые будут должны вызывать исключение - в разы меньше.
Такое относится к некритичным допускам- хуже работает, возможно. это критично- нет. стоит ли забыть про это- нет, просто стоит принимать во внимание.
Я согласен с вашим всеведущим постом, с постом на хабре - Исключение, это прежде всего обработка значительной ошибки.
Каким образом запутаетесь с if рано или поздно
Исключения можно приписать к ооп. А ооп- это вечный холивар)
В контексте ХелооВолрд- конечно не запутаешься. Если ты очень умелый кодер который продумал изначально всю архитектуру системы вместе с последующими её модернизациями- то тоже запутаться нельзя будет. Но дело в том, что нам постоянно нужно что-то исправлять и дополнять, при разрастании проекта это делать всё будет сложнее и сложнее.
 
о том, почему лишний раз не надо использовать исключение - один из вопросов на собеседовании и речь не только о пхп... что вы подразумеваете под серьезным проектом. я не знаю не одного движка, где бы их использовали (возможно во фремворках, но я их не разу не использовал), а крупные проекты, которые держат большие нагрузки либо пишут не на пхп, либо учитывают каждую миллисекунду...
 
Назад
Сверху