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() Функції обробки помилок та ведення журналу