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 комментариев