String-Vergleich mit ganzen Zahlen: Erklärung ungewöhnlicher Phänomene
In PHP kann der Vergleich von Strings mit ganzen Zahlen 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.
Bedenken 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 passiert das? ?
Laut der PHP-Dokumentation zur String-Konvertierung in Zahlen gilt: Wenn ein String in einem numerischen Kontext ausgewertet wird (z. B ein Vergleich), wird es basierend auf seinem 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 ergibt der Vergleich $test1 == 0 auf true.
Warum funktioniert $test2 nicht?
$test2 beginnt auch mit nicht numerischen Zeichen, also warum ist es 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“.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3