Ich habe Verwendungen gesehen von @
vor bestimmten Funktionen, wie zum Beispiel der folgenden:
$fileHandle = @fopen($fileName, $writeAttributes);
Wozu dient dieses Symbol?
Ich habe Verwendungen gesehen von @
vor bestimmten Funktionen, wie zum Beispiel der folgenden:
$fileHandle = @fopen($fileName, $writeAttributes);
Wozu dient dieses Symbol?
@
unterdrückt Fehlermeldungen.
Er wird in Codeschnipseln wie dem folgenden verwendet:
@file_get_contents('http://www.exaple.com');
Wenn die Domain "http://www.exaple.com" nicht erreichbar ist, wird eine Fehlermeldung angezeigt, aber mit @
wird nichts angezeigt.
Angenommen, wir haben den "@"-Operator nicht verwendet, dann würde unser Code wie folgt aussehen:
$fileHandle = fopen($fileName, $writeAttributes);
Und was ist, wenn die Datei, die wir zu öffnen versuchen, nicht gefunden wird? Es wird eine Fehlermeldung angezeigt.
Um die Fehlermeldung zu unterdrücken, verwenden wir den "@"-Operator wie folgt:
$fileHandle = @fopen($fileName, $writeAttributes);
PHP unterstützt einen Operator zur Fehlerkontrolle: das at-Zeichen (@)
. Wenn es einem Ausdruck in PHP vorangestellt wird, werden alle Fehlermeldungen, die durch diesen Ausdruck erzeugt werden könnten, ignoriert.
Wenn Sie eine benutzerdefinierte Fehlerbehandlungsfunktion mit set_error_handler()
dann wird er trotzdem aufgerufen, aber dieser benutzerdefinierte Fehlerhandler kann (und sollte) die error_reporting()
die Folgendes zurückgeben wird 0
wenn dem Aufruf, der den Fehler ausgelöst hat, ein @
.
<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
die ("Failed opening file: error was '$php_errormsg'");
// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.
?>
Anmerkung:-
1) Der @-Operator funktioniert nur bei Ausdrücken.
2) Eine einfache Faustregel lautet: Wenn Sie den Wert von etwas übernehmen können, können Sie den @-Operator davor setzen. Zum Beispiel können Sie ihn Variablen, Funktions- und Include-Aufrufen, Konstanten usw. voranstellen. Sie können ihn nicht vor Funktions- oder Klassendefinitionen oder bedingte Strukturen wie if und foreach usw. setzen.
Warnung:-
Gegenwärtig deaktiviert das Präfix "@" des Fehlerkontrolloperators sogar die Fehlerberichte für kritische Fehler, die die Skriptausführung beenden Ausführung beenden. Das bedeutet unter anderem, dass, wenn Sie "@" verwenden, um Fehler einer bestimmten Funktion zu unterdrücken und diese entweder nicht verfügbar ist oder sich vertippt haben, stirbt das Skript genau an dieser Stelle, ohne ohne Hinweis auf den Grund.
Es lohnt sich, hier ein paar Hinweise zur Verwendung des @ zu geben, die Sie beachten sollten: http://mstd.eu/index.php/2016/06/30/php-rapid-fire-what-is-the-symbol-used-for-in-php/
Der Fehlerhandler wird auch mit dem vorangestellten @-Symbol ausgelöst, es bedeutet nur, dass eine Fehlerstufe von 0 gesetzt ist, was in einem benutzerdefinierten Fehlerhandler entsprechend behandelt werden muss.
Wird einem Include ein @ vorangestellt, werden alle Fehler in der Include-Datei auf eine Fehlerstufe von 0 gesetzt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.