it-swarm.com.de

Warum ist === schneller als == in PHP?

Warum ist === schneller als == in PHP?

162
coderex

Da der Gleichheitsoperator == den Datentyp temporär konvertiert oder konvertiert, um zu sehen, ob er dem anderen Operanden gleich ist, während === (Identitätsoperator) keinerlei Konvertierung durchführen muss und somit weniger Arbeit erledigt wird, was die Arbeit beschleunigt.

190
meder omuraliev

Da === keine Typumwandlung durchführt, wird 0 == '0' zu true ausgewertet, jedoch 0 === '0' - zu false.

53
raveren

Zuerst prüft ===, ob die beiden Argumente dasselbe type - sind, so dass die Nummer 1 und die Zeichenfolge '1' bei der Typprüfung fehlschlagen, bevor Vergleiche tatsächlich ausgeführt werden. Andererseits prüft == den Typ nicht zuerst und konvertiert beide Argumente in denselben Typ und führt dann den Vergleich durch.

Daher ist === schneller bei der Überprüfung einer Fehlerbedingung

25
iblamefish

Es gibt zwei Dinge zu beachten:

  1. Wenn sich die Operandentypen unterscheiden, erzeugen == und === unterschiedliche Ergebnisse . In diesem Fall spielt die Geschwindigkeit der Bediener keine Rolle. es kommt darauf an, welches das gewünschte ergebnis liefert.

  2. Wenn die Operandentypen gleich sind, können Sie entweder == oder === verwenden, da beide zu gleichen Ergebnissen führen. In diesem Fall ist die Geschwindigkeit beider Bediener nahezu identisch. Dies liegt daran, dass von beiden Operatoren keine Typkonvertierung durchgeführt wird.

Ich habe die Geschwindigkeit von verglichen:

  • $a == $b vs $a === $b
  • wobei $a und $b zufällige ganze Zahlen waren [1, 100]
  • die beiden Variablen wurden millionenfach generiert und verglichen
  • die Tests wurden zehnmal durchgeführt

Und hier sind die Ergebnisse:

 $a == $b $a === $b
--------- ---------
 0.765770  0.762020
 0.753041  0.825965
 0.770631  0.783696
 0.787824  0.781129
 0.757506  0.796142
 0.773537  0.796734
 0.768171  0.767894
 0.747850  0.777244
 0.836462  0.826406
 0.759361  0.773971
--------- ---------
 0.772015  0.789120

Sie sehen, dass die Geschwindigkeit fast identisch ist.

21
Salman A

Ich weiß nicht genau, ob es wesentlich schneller ist, aber in den meisten Sprachen ist === ein direkter Typvergleich, während == versucht, Typ-Zwang zu machen, falls nötig/möglich, um eine Übereinstimmung zu erzielen.

7
Chris

Weil ===die Operanden nicht zwingen muss, vom gleichen Typ zu sein /, bevor sie verglichen werden.

Ich bezweifle jedoch, dass der Geschwindigkeitsunterschied sehr groß ist. Unter normalen Umständen sollten Sie den Operator verwenden, der mehr Sinn macht.

4
John Carter

Das == verursacht vor dem Vergleich einen größeren Aufwand für die Typkonvertierung. === prüft zuerst den Typ und fährt dann fort, ohne eine Typumwandlung durchführen zu müssen.

4
Martin

Infolgedessen ist === schneller, da der Datentyp nicht konvertiert wird, um zu sehen, ob zwei Variablen denselben Wert haben , oder === wenn auch der Typ der Variablen wichtig ist.

2
D.Martin

Schneller sollte nicht nur in direkter Ausführungszeit gemessen werden (direkte Leistungstests sind in diesem Fall fast vernachlässigbar). Das heißt, ich müsste einen Test mit Iteration oder Rekursion sehen, um wirklich zu sehen, ob es einen signifikanten kumulativen Unterschied gibt (wenn er in einem realistischen Kontext verwendet wird). Die Test- und Debugging-Zeit, die Sie beim Umgang mit Edge-Fällen sparen, sollte auch für Sie von Bedeutung sein

0