Sollten in PHP Vergleichsoperatoren (===) mit Dreifachgleichheit anstelle von Doppelgleichungen (==) verwendet werden, es sei denn, es gibt einen bestimmten Grund, letzteres zu verwenden?


Beste Antwort

Auf jeden Fall!

In PHP, Javascript oder einer anderen Sprache, die sowohl lose als auch strenge Äquivalenzprüfungen bietet, ist es am besten, die strenge Version zu verwenden, es sei denn, Sie haben einen zwingenden Grund, etwas anderes zu tun . (Tatsächlich bestehen einige Softwareentwickler darauf, dass Sie überhaupt keine losen Gleichheitsprüfungen verwenden!) Dafür gibt es eine Reihe von Gründen.

Erstens kann die Verwendung einer losen Äquivalenz zu einer ganzen Klasse von Fehlern führen das kann mit strikter Äquivalenz vermieden werden. Obwohl PHP besonders dafür bekannt ist, „hilfreich“ zu sein, sind die meisten Sprachen mit dynamischer Typisierung bei der Konvertierung zwischen Typen nachsichtig. Daten, die die lose Äquivalenz bestehen, verhalten sich in vielen Fällen möglicherweise einwandfrei und gehen viel tiefer in den Code ein, bevor sie einen Fehler auslösen oder einen unerwarteten Nebeneffekt verursachen. Strenge Äquivalenzprüfungen ähneln eher den Arten von Prüfungen, die in statisch typisierten Sprachen durchgeführt werden. Es ist weitaus unwahrscheinlicher, dass Daten in einem falschen Format Amok laufen.

Ein damit verbundenes Problem ist, wie lose Äquivalenz es schwieriger macht, über Code nachzudenken. Wenn Sie eine strikte Äquivalenz verwenden, können Sie viele Annahmen über die Daten treffen, die die Prüfung bestehen. Das Gleiche gilt nicht, wenn Sie lose Äquivalenz verwenden. Betrachten Sie die folgenden zwei Beispiele.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

Im ersten Beispiel können wir davon ausgehen, dass die Funktion „doThing“ mit einem numerischen Wert aufgerufen wird, und müssen nur berücksichtigen, wie diese Funktion mit Zahlen umgehen würde.

Im zweiten Beispiel kann „doThing“ jedoch mit einer Vielzahl von Typen aufgerufen werden, einschließlich Zeichenfolgen oder booleschen Werten. Beim Lesen der Funktion „doThing“ müssen Sie berücksichtigen, wie mit jedem Typ umgegangen werden kann, einschließlich aller verschiedenen (und manchmal unsinnigen) Regeln für implizite Typkonvertierungen. Das ist eine Menge, die Sie in Ihrem Kopf im Auge behalten müssen!

Wenn Sie lose Äquivalenz verwenden, sind Sie auch nicht explizit. Dies trägt nicht nur dazu bei, dass es schwierig ist, durch die Logik zu argumentieren, sondern erfasst auch nicht die tatsächlichen Anforderungen, die die Logik darstellen soll. In Beispiel 2 von oben kann nicht festgestellt werden, ob der ursprüngliche Programmierer numerische Werte, Zeichenfolgenwerte, Boolesche Werte oder eine Kombination davon erwartet hat. Dies macht den Code zu einem Problem.

Obwohl implizites Typ-Casting praktisch sein kann, ist es in einer professionellen Umgebung kaum erforderlich. Sie können jederzeit sinnvolle Standardeinstellungen festlegen oder die Daten manuell in den entsprechenden Typ zwingen. Dies erfordert möglicherweise mehr Code und mehr Aufwand, erhöht jedoch auch die Zuverlässigkeit Ihres Codes erheblich.

Antwort

Wenn Sie wissen, dass zwei Werte denselben Typ haben sollten, verwenden Sie Strict (Ja). ===) über lose (==). Strict hat eine bessere Leistung, da es keine Typkonvertierung wie lose durchführen muss.

Zum Beispiel gibt 1 == „1“ true zurück, da diese Zeichenfolge in eine Zahl konvertiert wird, um die Gleichheit zu überprüfen

Während 1 === „1“ false zurückgibt

Strenge Gleichheit geht so ziemlich „nicht der gleiche Typ? FALSE „

Hoffe das hilft

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.