PHP попробуй ловить исключения - PullRequest
8 голосов
/ 11 октября 2011

Здравствуйте, у меня есть такой код:

try
{
    // Here I call my external function
    do_some_work()
}
catch(Exception $e){}

Вопрос в следующем: если у do_some_work () возникла проблема и возникла ошибка, эта попытка перехвата скрывает ошибку?

Ответы [ 3 ]

12 голосов
/ 11 октября 2011

В PHP есть два типа ошибок. Есть исключения, и есть ошибки.

try..catch будет обрабатывать исключения, но не будет обрабатывать ошибки.

Чтобы перехватывать ошибки PHP, вам нужно использовать функцию set_error_handler() .

Один из способов упростить ситуацию - заставить set_error_handler() выдать исключение при возникновении ошибки. Вам нужно будет действовать осторожно, если вы сделаете это, поскольку это может привести к всевозможным проблемам, но это будет способ заставить try..catch работать со всеми ошибками PHP.

7 голосов
/ 11 октября 2011

выдает фатальную ошибку

Нет, catch не может поймать Fatal Errors. Вы не можете даже с обработчиком ошибок.

Если вы хотите перехватить все остальные ошибки, найдите ErrorException и его специальное использование с set_error_handler:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

/* Trigger exception */
strpos();
7 голосов
/ 11 октября 2011

Если do_some_work() выдает исключение, оно будет перехвачено и проигнорировано.

Конструкция try / catch не влияет на стандартные ошибки PHP, только на исключения.

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