PHP supporta un operatore di controllo dell'errore: il carattere at (@). Quando prefisso ad una espressione in PHP, qualunque messaggio di errore che possa essere generato da quella espressione sarà ignorato.
Se è stata assegnata una funzione personalizzata di gestione degli errori con set_error_handler() questa verrà comunque chiamata, ma questa funzione può (e dovrebbe) chiamare error_reporting() che restituirà 0 quando la chiamata che ha attivato l'errore era preceduta da un @.
Se la caratteristica track_errors è abilitata, qualsiasi messaggio di errore generato dall'espressione sarà salvato nella variabile globale $php_errormsg. Questa variabile sarà sovrascritta ad ogni errore, quindi va controllata spesso per poterla utilizzare.
<?php
/* Errore di file intenzionale */
$my_file = @file ('file_inesistente') or
die ("Apertura del file fallita: l'errore è '$php_errormsg'");
// 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, funzioni e chiamate ad include, costanti, e così via. non si può anteporre a definizioni di funzioni o classi, o strutture condizionali come if e foreach, e così via.
Vedere anche error_reporting() e la sezione del manuale Gestione degli errori e funzioni di log.
In effetti, il prefisso operatore di controllo dell'errore "@" disabiliterà la restituzione di errori per errori critici che interrompono l'esecuzione dello script. Tra le altre cose, questo significa che se si usa "@" per sopprimere errori da una certa funzione ed essa non è disponibile oppure è stata scritta male, lo script terminerà senza dare indicazioni sul motivo.