PHP unterstützt einen Operator zur Fehlerkontrolle: Das @-Symbol. Stellt man das @ in PHP vor einen Ausdruck werden alle Fehlermeldungen, die von diesem Ausdruck erzeugt werden könnten, ignoriert.
Wurde ein benutzerdefinierte Fehlerbehandlungsfunktion mit set_error_handler() registriert, dann wird diese immer noch aufgerufen, aber diese benutzerdefinierte Fehlerbehandlung kann (und sollte) error_reporting() aufrufen, das 0 zurückgeben wird, wenn dem Aufruf, der den Fehler auslöste, ein @ vorangestellt war.
Alle Fehlermeldungen, die von diesem Ausdruck erzeugt
werden, sind im "message"
Element des Arrays, das von
get_error_last() zurückgegeben wird, enthalten.
Da das Ergebnis dieser Funktion sich bei jedem
Fehlers ändert, so dass es möglichst früh geprüft werden sollte.
<?php
/* Beabsichtigter Dateifehler */
$my_file = @file ('nicht_vorhandene_Datei') or
die ("Datei konnte nicht geöffnet werden: Fehler war:'" . error_get_last()['message'] . "'");
// Das funktioniert bei jedem Ausdruck, nicht nur bei Funktionen:
$value = @$cache[$key];
// erzeugt keine Notice, falls der Index $key nicht vorhanden ist.
?>
Hinweis: Der @-Operator funktioniert nur bei Ausdrücken. Eine einfache Daumenregel: wenn Sie den Wert von etwas bestimmen können, dann können Sie den @-Operator davor schreiben. Zum Beispiel können Sie ihn vor Variablen, Funktionsaufrufe und vor include setzen, vor Konstanten und so weiter. Nicht verwenden können Sie diesen Operator vor Funktions- oder Klassendefinitionen oder vor Kontrollstrukturen wie zum Beispiel
if
und foreach und so weiter.
Siehe auch error_reporting() und den Abschnitt über Fehlerbehandlung- und Protokollierfunktionen.
Zum gegenwärtigen Zeitpunkt deaktiviert der "@" Fehler-Kontrolloperator die Fehlermeldungen selbst bei kritischen Fehlern, die die Ausführung eines Skripts beenden. Unter anderem bedeutet das, wenn Sie "@" einer bestimmten Funktion voranstellen, diese aber nicht zur Verfügung steht oder falsch geschrieben wurde, Ihr PHP-Skript einfach beendet wird, ohne Hinweis auf die Ursache.