Vergleich von Zeichenfolgen mit Ganzzahlen: Erklärung ungewöhnlicher Phänomene
In PHP kann der Vergleich von Zeichenfolgen mit Ganzzahlen manchmal zu skurrilen Ergebnissen führen. Diese Verwirrung ist auf das lockere Vergleichsverhalten von PHP zurückzuführen, insbesondere beim Vergleich von Zeichenfolgen mit dem Wert 0.
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!?";
Überraschenderweise lautet die Ausgabe dieses Codes:
Test 1 is Equal!?
Warum ist das so? auftreten?
Laut der PHP-Dokumentation zur Zeichenfolgenkonvertierung in Zahlen wird eine Zeichenfolge bei der Auswertung in einem numerischen Kontext (z. B. einem Vergleich) basierend auf ihrem Inhalt in eine Gleitkommazahl oder Ganzzahl konvertiert . Wenn die Zeichenfolge Zeichen wie „.“, „e“ oder „E“ enthält, wird sie als Float behandelt. Andernfalls wird es als Ganzzahl betrachtet.
Im Fall von $test1 enthält die Zeichenfolge keine numerischen Zeichen und wird daher in den Ganzzahlwert 0 umgewandelt. Deshalb wird der Vergleich $test1 == 0 ausgewertet zu wahr.
Warum funktioniert $test2 nicht?
$test2 beginnt auch mit nicht numerisch Zeichen, warum ist es also nicht auch gleich 0? Dies liegt daran, dass die Zeichenfolge am Anfang das Zeichen „3“ enthält. Laut PHP-Dokumentation beginnt eine gültige Zahl mit einem Vorzeichen (optional), gefolgt von Ziffern. Somit wird $test2 in eine Gleitkommazahl mit dem Wert 0 konvertiert und der Vergleich $test2 == 0 ergibt „falsch“.
Das obige ist der detaillierte Inhalt vonWarum liefert der lose String-zu-Integer-Vergleich von PHP manchmal unerwartete Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!