632 Stimmen

Wozu dient das @-Symbol in PHP?

Ich habe Verwendungen gesehen von @ vor bestimmten Funktionen, wie zum Beispiel der folgenden:

$fileHandle = @fopen($fileName, $writeAttributes);

Wozu dient dieses Symbol?

8voto

fico7489 Punkte 7241

@ 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.

7voto

Sujeet Kumar Punkte 1232

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);

5voto

Kishor Singh Punkte 61

Wenn das Öffnen fehlschlägt, wird ein Fehler der Stufe E_WARNING erzeugt. Sie können @ verwenden, um diese Warnung zu unterdrücken.

1voto

Ravi Punkte 6253

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.

1voto

twigg Punkte 3419

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/

  1. 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.

  2. Wird einem Include ein @ vorangestellt, werden alle Fehler in der Include-Datei auf eine Fehlerstufe von 0 gesetzt.

CodeJaeger.com

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.

Powered by:

X