@ Zeichen vor einem Funktionsaufruf


135

Was ist der Unterschied zwischen diesen beiden Funktionsaufrufen in PHP?

init_get($somevariable);

@init_get($somevariable);

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.


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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.