try catch notice

325
21 января 2017, 13:51

Почем try catch не ловит ошибки уровня notice? а именно он не ловит не существования индекса массива.

Answer 1

Потому что try работает с исключениями. А notice - это сообщение об ошибке.

Для того чтобы РНР стал обрабатывать ошибки как исключения, надо настроить пользовательский обработчик ошибок, чтобы он начал выбрасывать исключения при ошибках. Самый простой будет выглядеть так:

set_error_handler(function ($err_severity, $err_msg, $err_file, $err_line) {
    throw new ErrorException ($err_msg, 0, $err_severity, $err_file, $err_line);
});

Если добавить этот код в начале РНР файла, то все ошибки начнут порождать исключения.

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

Answer 2

Это решается просто в своем коде добавляете(условный пример)

if(!array_key_exists($x[5])) throw new Exception('Не найден ключ '.5.' в массиве $x');

а уже в исполняемом коде сможете отловить эту ошибку

дабы быть правильно понятым я прилагаю статью где подробно описывается метод отлавливания ошибок, написанная программистом в финансовой сфере Хабрахабр

READ ALSO
PHP Parse error: syntax error, unexpected '{'

PHP Parse error: syntax error, unexpected '{'

Есть сайт на wordpress последней версии с php7 на хостинге с минимизированным файлом style_dynamicphp в теме

302
Как внести в бд данные из XML?

Как внести в бд данные из XML?

Ребят пытаюсь внести в базу данные из xml, но ничего не выходитУ меня такое подозрение, что xml не успевают прогрузиться

288
Запуск видео при скроллинге

Запуск видео при скроллинге

Подскажите, как запустить youtube видео при условии того что пользователь отскролил 1585px

483