2008-09-26 6 views
5

Ich bin neu in PHP und ich bin verwirrt einige Beispiele zu sehen, die eine Funktion mit einem @ Präfix wie @mysql_ping() aufrufen.PHP Alias ​​@ Funktion

Wozu dient es? Googeln/Suchen ist keine große Hilfe, da @ verworfen wird und das Keyword "Alias" nicht gut genug ist.

Antwort

15

@ unterdrückt Fehler, Warnungen und Hinweise.

Sie können es für einen guten Zweck verwenden, wenn Sie es mit einem benutzerdefinierten error handler oder mit der entsprechenden Überprüfung von $ php_errormsg Variable ergänzen, damit Sie Fehler richtig behandeln können.

Nach meiner Erfahrung wird diese ordnungsgemäße Verwendung nicht sehr viel gesehen und wird stattdessen auf die schlechte Weise verwendet, nur um Fehler zu verbergen, ohne auf ihnen zu reagieren.

Mehr Infos unter http://www.php.net/manual/en/language.operators.errorcontrol.php

+0

Nun faul ... Lassen Sie uns sagen, es ist sehr nützlich für eine "einmal ausgeführt, wegzuwerfen" Skript. In jedem Fall ist es eine schlechte Übung. –

+2

Es ist sehr nützlich, Fehlermeldungen zu unterdrücken, wenn Sie ansonsten einen Fehlerhandler haben. – eyelidlessness

+0

"Es wird normalerweise von faulen Programmierern verwendet, die Fehlercodes nicht überprüfen wollen" - Völlig falsch. @ ist genau, wie PHP seinen "Versuch/Fang" macht http://www.php.net/manual/en/language.operators.errorcontrol.php – Havenard

2

Googling für "PHP at Symbol" schlägt vor, dass PHP aufgefordert wird, keine Fehlermeldungen anzuzeigen, die der Aufruf verursacht.

3

Es unterdrückt die Ausgabe von Fehlermeldungen. Im Gegensatz zu einem anderen Kommentator denke ich, dass es eine gute Programmierpraxis ist, sie zu benutzen (besonders, wenn Sie eine Web-App entwickeln, bei der die Ausgabe im HTML der Ausgabeseite gemischt wird).

Funktionen wie mysql_connect geben eine Ressourcen-ID zurück oder FALSE bei Fehlern. Verwenden Sie @mysql_connect (...) und überprüfen Sie den Rückgabewert.

0

Wenn eine Funktion mit dem Symbol a vorfixiert wird, wird der PHP-Fehlerhandler nicht mehr ausgelöst, wenn ein Fehler auftritt. Denken Sie daran, dass Sie die gesamte Fehlerbehandlung selbst durchführen müssen, wenn Sie sich dafür entscheiden.

$test = @file_get_contents('nonexistant.file'); 
if(!$test) 
{ 
    die('Failed'); 
} 

Eine bessere Praxis ist display_errors auszuschalten und benutzerdefinierte Fehlerbehandlungsroutinen verwenden (siehe Error Exception).

1

Es unterdrückt alle Fehler, die sonst ausgegeben werden könnten.

Es ist ein Rezept für Schmerz und Not ist, da es unweigerlich zu Schwierigkeiten führt, wenn ein Fehler auftritt, sind Sie verpflichtet, die Ursache zu verbringen Stunden aufzuspüren. Wenn der Operator @ nicht verwendet worden wäre, wäre der Fehler in Sekunden gefunden worden.

Es gibt keinen Grund, es zu verwenden, verwenden Sie die Einstellungen in display_errors und error_log ini, um zu verhindern, dass Fehler auf einer Live-Site angezeigt werden, und lassen Sie sie auf Ihrer Dev-Site anzeigen.

Wenn es einen Fehler gibt, die Sie nicht wollen, um zu sehen, du bist besser dran, nur es zu reparieren, als es zu unterdrücken!

Wenn es etwas in einem externen lib und außerhalb Ihrer Kontrolle ist, schreiben Sie es einfach in die Protokolle, schalten Sie display_errors auf die Produktion, und mit ihr leben. Denn es ist nicht abzusehen, ob der Fehler Sie unterdrücken jetzt und sind glücklich zu leben wird immer der Fehler, die von dort ausgelöst.

@ === BAD

0

Manchmal ist es Nützlich- vor allem, wenn der Administrator nicht Sie wollen mit der PHP-Umgebung spielen oder der Wert ist nicht wichtig und ist hauptsächlich kosmetischer Natur.Erinnere dich jedoch daran. Es ist ein Workaround, kein Allheilmittel.

[...]

.$foutDate = @filemtime($keyring); /* Don't care, as we've already established file */ 

$f["date"] = $foutDate; 

$f["fullDate"] = date("r", $foutDate); 

[...]