ошибки в PHP 7 не выбрасываются

Это мое понимание, согласно http://php.net/manual/en/language.errors.php7.php, что ошибки в PHP7 теперь должны быть выброшены. Но в моем собственном тестировании это не так:

<?php

error_reporting(E_ALL);

try {
echo $a[4];
} catch (Throwable $e) {
echo "caught\n";
}

echo "all done!\n";

В этом случае я ожидаю, что «схвачено» будет echo’d, а затем сценарий скажет «все готово!». Вместо этого я получаю это:

Notice: Undefined variable: a in C:\games\test-ssh3.php on line 12
all done!

Я что-то неправильно понимаю?

0

Решение

Исключения генерируются только для определенных типов ошибок, которые ранее останавливали выполнение (E_RECOVERABLE_ERROR). Предупреждения и уведомления не останавливают выполнение, поэтому исключение не выдается (найдено источник за это).

Вы должны определить пользовательский обработчик ошибок и брось туда исключение. Уведомления PHP не являются исключениями, поэтому они не перехватываются try/catch блок.

set_error_handler('custom_error_handler');

function custom_error_handler($severity, $message, $filename, $lineno) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}

try {
echo $a[4];
} catch (ErrorException $e) {
echo $e->getMessage().PHP_EOL;
}

echo "all done!\n";
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]