PHP поддерживает один оператор контроля ошибок: знак at ( @
). При добавлении к выражению в PHP любая диагностическая ошибка, которая может быть сгенерирована этим выражением, будет подавлена.
Если пользовательская функция обработчика ошибок установлена с помощью set_error_handler() , она все равно будет вызываться, даже если диагностика была подавлена.
Предупреждение
До PHP 8.0.0 функция error_reporting() , вызываемая внутри пользовательского обработчика ошибок, всегда возвращала
0
значение, если ошибка была подавлена@
оператором. Начиная с PHP 8.0.0, он возвращает значениеE_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE
.
Любое сообщение об ошибке, сгенерированное выражением, доступно в "message"
элементе массива, возвращаемом функцией error_get_last() . Результат этой функции будет меняться при каждой ошибке, поэтому его необходимо проверять заранее.
<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '" . error_get_last()['message'] . "'");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
Примечание . Оператор -
@
работает только с выражениями . Простое эмпирическое правило: если можно получить значение чего-либо, то можно добавить к@
нему оператор. Например, его можно добавлять перед переменными, вызовами функций, вызовами определенных языковых конструкций (например , include ) и т.д. Его нельзя добавлять перед определениями функций или классов или условными структурами, такими какif
и foreach и т. д.
Предупреждение
До версии PHP 8.0.0
@
оператор мог отключать критические ошибки, которые прерывали выполнение скрипта. Например, добавление@
перед вызовом несуществующей функции из-за ее недоступности или опечатки приведет к завершению сценария без указания причины.
0 комментариев