Прекращает ли выполнение исключение PHP? - PullRequest
37 голосов
/ 20 февраля 2010
<?php
     function some_function($arg) {
         if($filter->check_for_safe_input($arg)) {
             throw new Exception("Hacking Attempt");
         }
         do_some_database_stuff($arg);
     }
 ?>

В приведенном выше примере кода вызывается ли do_some_database_stuff в случае сбоя check_for_safe_input или исключение прекращает выполнение функции? Это то, в чем я никогда не был полностью уверен, и обычно я просто вставляю функции типа do_some_database_stuff в оператор else, чтобы быть уверенным, но это приводит к огромному вложению функций.

Ответы [ 3 ]

45 голосов
/ 20 февраля 2010

Да, необработанные исключения приводят к фатальным ошибкам, которые останавливают выполнение скрипта. Таким образом, функция do_some_database_stuff не будет вызываться, если выдается исключение. Вы можете прочитать больше об исключениях в этой статье .

11 голосов
/ 20 февраля 2010

Посмотрите руководство PHP по исключениям.

Когда выдается исключение, код следующего заявления не будет выполняется, и PHP попытается найти первый соответствующий блок catch. Если исключение не пойман, PHP Fatal Ошибка будет выдана с "Uncaught Исключение ... », если обработчик был определен с set_exception_handler ().

http://ch.php.net/exceptions

Так что да, остальная часть функции не выполняется, вместо этого возникает ошибка fata.
Если вы перехватываете исключение, выполнение сценария продолжается в соответствующем блоке catch, все, что находится «между» функцией, которая вызывает исключение, и блоком catch не выполняется.

2 голосов
/ 20 февраля 2010

Исключение, если оно не перехвачено, завершит выполнение скрипта.

См. Главу руководства PHP об исключениях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...