Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Почему set_exception_handler() не перехватывает исключения Fatal error?
Форумы портала PHP.SU » » Вопросы новичков » Почему set_exception_handler() не перехватывает исключения Fatal error?

Страниц (1): [1]
 

1. qtk - 01 Декабря, 2019 - 22:21:37 - перейти к сообщению
Вроде бы простой код:
PHP:
скопировать код в буфер обмена
  1. set_exception_handler(function (Throwable $t) {
  2.     echo $t->getMessage;
  3. });
  4.  
  5. require_once 'not-exists.php';


Но вылазит ошибка, а должно быть исключение

Fatal error: main(): Failed opening required 'not-exists.php' (include_path='.;e:/ospanel/modules/php/PHP-7.1;e:/ospanel/modules/php/PHP-7.1/PEAR/pear') in
..............\test.php on line 10
2. Строитель - 01 Декабря, 2019 - 22:39:35 - перейти к сообщению
qtk пишет:
а должно быть исключение

Почему вы так думаете? Исключение нужно сгенерировать (выбросить) оператором throw (если до этого момента исключение не было сгенерировано):
Спойлер (Отобразить)
3. Мелкий - 01 Декабря, 2019 - 23:04:40 - перейти к сообщению
Потому что ошибка не есть исключение. См. set_error_handler, впрочем после fatal error жизни всё равно нет.
4. qtk - 02 Декабря, 2019 - 07:29:19 - перейти к сообщению
Как я понял из официальной документации, PHP 7 кидает исключение вместо стандартных ошибок. Но возможно, что я чего-то недопонимаю
Цитата:
В PHP 7 механизм сообщения об ошибках был сильно изменен. Традиционное оповещение об ошибке в PHP 5 было заменено новым механизмом, в котором большинство ошибок вызываются с помощью исключений класса Error.
https://www.php.net/manual/ru/la....errors.php7.php
5. Строитель - 02 Декабря, 2019 - 09:22:40 - перейти к сообщению
qtk пишет:
Но возможно, что я чего-то недопонимаю
Читайте далее

"Как и обычные исключения, исключения Error вызываются до появления первого соответствующего блока catch. Если соответствующие блоки не предусмотрены, то будет вызван любой обработчик исключений, установленный с помощью set_exception_handler(). В случае отсутствия обработчика по умолчанию, исключение будет конвертировано в фатальную ошибку и будет обработано как традиционная ошибка."
6. Мелкий - 02 Декабря, 2019 - 09:58:40 - перейти к сообщению
qtk пишет:
большинство ошибок

"большинство" не означает "все".
7. qtk - 02 Декабря, 2019 - 12:41:29 - перейти к сообщению
Строитель пишет:
В случае отсутствия обработчика по умолчанию, исключение будет конвертировано в фатальную ошибку и будет обработано как традиционная ошибка."
Так ведь я его и регистрирую.

Или давайте возьмем ошибку Parse Error которая уж точно кидает исключение ParseError судя по докам. НО
и получаем Parse error: syntax error, unexpected end of file in H:\OSPanel\domains\red\test.php on line 85
8. qtk - 03 Декабря, 2019 - 11:37:10 - перейти к сообщению
Всем огромное спасибо за помощь!!!!

 

Powered by ExBB FM 1.0 RC1