Heim > Backend-Entwicklung > PHP-Tutorial > Warum führt der Loose-Type-Vergleich von PHP beim Vergleich von Strings und ganzen Zahlen zu unerwarteten Ergebnissen?

Warum führt der Loose-Type-Vergleich von PHP beim Vergleich von Strings und ganzen Zahlen zu unerwarteten Ergebnissen?

Mary-Kate Olsen
Freigeben: 2024-12-07 13:35:13
Original
671 Leute haben es durchsucht

Why Does PHP's Loose Type Comparison Lead to Unexpected Results When Comparing Strings and Integers?

Anomalie beim Vergleich von Zeichenfolgen mit Ganzzahlen

Beim Vergleich einer Zeichenfolge mit einer Ganzzahl in PHP können unerwartete Ergebnisse auftreten. Betrachten Sie den folgenden Code:

$test1 = "d85d1d81b25614a3504a3d5601a9cb2e";
$test2 = "3581169b064f71be1630b321d3ca318f";

if ($test1 == 0)
  echo "Test 1 is Equal!?";
if ($test2 == 0)
  echo "Test 2 is Equal!?";

// Returns: Test 1 is Equal!?
Nach dem Login kopieren

Überraschenderweise ergibt der $test1-Vergleich trotz seines nicht numerischen Werts „true“. Diese Anomalie ist auf die losen Typkonvertierungsregeln von PHP zurückzuführen.

String-Konvertierung in Zahlen

Laut PHP-Handbuch:

"Wenn ein String ausgewertet wird In einem numerischen Kontext werden der resultierende Wert und der resultierende Typ wie folgt bestimmt:

  • Wenn die Zeichenfolge welche enthält der Zeichen '.', 'e' oder 'E' wird es als Gleitkommazahl ausgewertet.
  • Andernfalls wird es als Ganzzahl ausgewertet.

Die Der Wert wird durch den Anfangsteil der Zeichenfolge angegeben. Wenn die Zeichenfolge mit gültigen numerischen Daten beginnt, ist dies der verwendete Wert. Andernfalls ist der Wert 0 (Null)."

Erklärung der Anomalie

Im bereitgestellten Beispiel enthält $test1 keine Dezimalpunkte, Exponenten oder führende Nullen. Daher wird es als Ganzzahl mit einem Anfangswert von 0 interpretiert. Da 0 in PHP gleich der Ganzzahl 0 ist, wird der Vergleich als wahr ausgewertet.

Warum $test2 fehlschlägt

Die Zeichenfolge $test2 enthält auch nicht numerische Zeichen. Da es jedoch mit einer Ziffer beginnt, wird sein Anfangswert als Ganzzahl von 3581169 interpretiert. Diese Ganzzahl ist ungleich 0, was zu einem falschen Vergleich führt.

Typanomalien vermeiden

Um diese Anomalien zu verhindern, verwenden Sie immer strenge Typvergleiche. Im bereitgestellten Beispiel können Sie den Code wie folgt umschreiben:

if ($test1 === "0")
  echo "Test 1 is Equal!";
if ($test2 === "0")
  echo "Test 2 is Equal!?";
Nach dem Login kopieren

Durch die Verwendung des strengen Vergleichsoperators === stellen Sie sicher, dass die Werte vom gleichen Typ sind und verhindern unerwartete Ergebnisse.

Das obige ist der detaillierte Inhalt vonWarum führt der Loose-Type-Vergleich von PHP beim Vergleich von Strings und ganzen Zahlen zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage