Error Control Operators
Оновлено: 11.05.2023
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 за допомогою оператора @ можна було вимкнути критичні помилки, які припиняють виконання скрипта. Наприклад, додавання @ до виклику функції, яка не існує, оскільки вона недоступна або надрукована з помилкою, призведе до завершення виконання скрипта без пояснення причин.
error_reporting() Функції обробки помилок та ведення журналу