@ Zeichen vor einem Funktionsaufruf

135

Was ist der Unterschied zwischen diesen beiden Funktionsaufrufen in PHP?

init_get($somevariable);

@init_get($somevariable);
Nixe
quelle
Das "@" schließt alle PHP-Fehler und Hinweise
Erkan Özkök

Antworten:

210

Das "@" bringt alle PHP-Fehler zum Schweigen, die Ihre Funktion auslösen könnte.

solidgumby
quelle
Aber was ist, wenn Sie sich @vor die trigger_errorFunktion von PHP stellen ? Ich habe das in einigen Codes gesehen, aber sein Verhalten ist für mich bisher inkonsistent. In einigen Fällen wird der Fehler vom konfigurierten Fehlerbehandler gemeldet, in anderen Fällen scheint er gemeldet zu werden.
Fritzmg
2
Das @wird vorübergehend error_reportingauf 0 gesetzt , aber den Fehler nicht "unterdrücken".
Solidgumby
36

Wie bereits beantwortet, @wird der Fehler (falls vorhanden) nicht mehr angezeigt.
In Bezug auf die Leistung wird dies nicht empfohlen.

Was PHP tut, ist:

  • Lesen des Fehleranzeigezustands
  • Stellen Sie die Fehleranzeige so ein, dass keine Fehler angezeigt werden
  • Ausführen Ihrer Funktion
  • Setzen der Fehleranzeige auf den vorherigen Status

Wenn Sie nicht möchten, dass Fehler angezeigt werden, verwenden Sie error_reporting(0);.

Oder schreiben Sie einfach fehlerfreien Code: P.

AntonioCS
quelle
Setzen Sie lieber Null, aber wenn das funktioniert, wusste großartig nichts davon :)
AntonioCS
1
Was ist mit Funktionen, die Sie nicht steuern, wie z. B. Mail? Welche anderen Möglichkeiten gibt es? Ich benutze gerade @, aber es wäre großartig, wenn ich es auf andere Weise tun könnte
spuas
6

Wie alle sagten, stoppt es die Ausgabe von Fehlern für diese bestimmte Funktion. Dies verringert jedoch die Leistung erheblich, da die Fehleranzeigeeinstellung zweimal geändert werden muss. Ich würde empfehlen, Warnungen oder Fehler NICHT zu ignorieren und stattdessen den Code zu korrigieren.

Daniel Sorichetti
quelle
Vielen Dank an alle für Ihre Antworten. Dieser Code gehört nicht mir, ich habe den phpBB-Code nur aus Neugier betrachtet, daher habe ich keine Leistungsprobleme. :) Danke noch einmal.
Nixie