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!?
Ü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:
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!?";
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!