Ist es in Ordnung, @ zu verwenden, wenn ein möglicherweise fehlender Wert aus einem PHP-Array extrahiert wird? Beispiel:
%Vor%Das beabsichtigte Verhalten:
%Vor%Ich möchte es wissen, bevor ich das Nutzungsmuster verbreite.
Der Operator @
unterdrückt Fehlermeldungen, und wenn Sie potenziell verwenden, wird Ihr Code für andere Fehler und unerwartetes Verhalten eingerichtet, die schwer aufzuspüren sind. So ist es sicherlich ein Antipattern.
Daher würde ich das zweite Bit sehr bevorzugen. Es macht es viel klarer
Um es übersichtlicher zu gestalten, können Sie den ternären Bedingungsoperator ?:
verwenden, wie in Mark Bakers Antwort . Etwas weniger Code und mehr Symbole, aber die Bedeutung ist gut erkannt.
Tatsächlich ist die isset
Variation das Anti-Pattern. Wenn Sie nur isset($var)?$var:NULL
verwenden, um den "Fehler" zu unterdrücken, haben Sie nichts erreicht, anstatt die richtige Syntax zum Unterdrücken von Fehlern zu verwenden. Es hat das gleiche Ergebnis, ist aber weniger lesbar.
Dafür streiten sich die Leute wegen der wahrgenommenen "Sauberkeit" und weil die Verwendung von isset eine Mikrooptimierung ist. Die Vermeidung von @
und die Verwendung von isset als Ersatz für syntaktischen Salz ist nur Cargo-Kult-Programmierung.
Das Ignorieren von Warnungen ist definitiv ein Antipattern; also ja, es ist ein Anti-Muster (und ich kann garantieren, dass, wenn du lernst, Warnungen zu unterdrücken, einer von ihnen zurückkommt und dich in den hinteren Teil beißt, wenn nicht schlimmer).
Auch wenn die zweite Version ausführlicher ist, gibt sie der nicht initialisierten Variablen einen bekannten Zustand (oder kann verwendet werden, um das Problem zu lösen, wenn die Variable gefüllt werden soll).
Die dritte Option:
%Vor%Ich weiß, dass das die Frage nicht direkt beantwortet; Ich hätte es als Kommentar gesetzt, außer dass es wirklich formatiert werden musste.
Die Idee hier ist, dass, wenn Sie versuchen, Ihren Code zu verkürzen, indem Sie einen Einliner anstelle von einem if-else Block verwenden, dann können Sie es immer noch in einen prägnanten Einzeiler unter Verwendung eines ternären Operators bekommen und geben Sie das Beste aus beiden Welten.
Der zweite Codeblock (oder Mark Bakers Alternative, der genau gleich funktioniert) ist besser. Ich bin mir über PHP nicht ganz sicher, aber in vielen anderen Programmiersprachen würde das einfache Ignorieren einer Variablen einen Fehler auslösen. Zumindest mit dem zweiten Block initialisierst du die Variable auf einen Wert oder Speicherplatz.
Die Fehlerunterdrückung sollte häufiger verwendet werden, wenn Sie erwarten, dass eine Funktion einen erwarteten Fehler im Endprodukt verursacht (dies wird jedoch in der Regel nicht der Fall sein).
Viel Glück!
Dennis M.
Tags und Links arrays php operators error-suppression