Operatori di controllo errori

PHP supporta un operatore di controllo dell'errore: il carattere at (@). Quando viene anteposto ad una espressione in PHP, qualunque messaggio di errore che possa essere generato da quella espressione sarà soppresso.

Se è stata assegnata una funzione personalizzata di gestione degli errori con set_error_handler() questa verrà comunque chiamata, anche se la diagnostica è stata soppressa.

Avviso

Prima di PHP 8.0.0, la funzione error_reporting() chiamata all'interno del gestore di errori personalizzato restituiva sempre 0 se l'errore veniva soppresso dall'operatore @. A partire da PHP 8.0.0, restituisce il valore E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR | E_PARSE.

Qualsiasi messaggio di errore generato dall'espressione è disponibile nell'elemento "message" dell'array restituito da error_get_last(). Il risultato di quella funzione cambierà ad ogni errore, quindi deve essere controllato in anticipo.

<?php
/* Errore di file intenzionale */
$my_file = @file ('file_inesistente') or
die (
"Apertura del file fallita: l'errore è stato '" . error_get_last()['message'] . "'");

// questo funziona per qualsiasi espressione, non solo funzioni:
$value = @$cache[$key];
// non verrà generata una notifica se l'indice $key non esiste.

?>

Nota: L'operatore @ funziona solo sulle espressioni. Una semplice regola è: se si può ottenere il valore di qualcosa, allora si può anteporre ad esso l'operatore @. Per esempio, si può anteporre a variabili, chiamate di funzioni, determinate chiamate di costrutti di linguaggio (per esempio include), e così via. Non si può anteporre a definizioni di funzioni o classi, o strutture condizionali come if e foreach, e così via.

Avviso

Prima di PHP 8.0.0, era possibile per l'operatore @ disabilitare gli errori critici che interrompevano l'esecuzione dello script. Ad esempio, anteporre @ ad una chiamata di una funzione che non esiste, non essendo disponibile o digitata in modo errato, causerebbe il termine dello script senza alcuna indicazione sul perché.