PHPs überraschende String-Zahlen-Gleichheit: Erkundung der '0 == "e"'-Anomalie
In PHP kann ein scheinbar harmloser Vergleich helfen führen zu unerwarteten Ergebnissen, wie im folgenden Codeausschnitt deutlich wird:
$item['price'] = 0; if ($item['price'] == 'e') { $item['price'] = -1; }
Trotzdem Wenn man $item['price'] auf 0 initialisiert, wird die if-Bedingung unerklärlicherweise als wahr ausgewertet, wenn 'e' dem Preis zugewiesen wird, wobei 0 als Äquivalent zur Zeichenfolge 'e' behandelt wird.
Die Offenbarung : Typumwandlung und PHPs ==-Operator
Der Schuldige liegt im ==-Operator von PHP, der versucht, Operanden in denselben umzuwandeln Geben Sie ein, bevor Sie den Vergleich durchführen. In diesem Fall wird die Ganzzahl 0 in eine Zeichenfolge umgewandelt. Da „e“ keine gültige Ganzzahl ist, wird es zu 0, was zu einer falschen Übereinstimmung führt.
Die Lösung: Einen strengen Vergleich anwenden
Um solche Anomalien zu vermeiden, ist es Es empfiehlt sich, den ===-Operator anstelle von == zu verwenden. === führt einen strikten Vergleich durch, der keinen Typzwang beinhaltet, um sicherzustellen, dass nur Werte desselben Typs als gleich betrachtet werden.
Der bahnbrechende Shift von PHP 8
In einer deutlichen Abweichung von früheren Versionen führte PHP 8 ein geändertes Verhalten für String-Zahlen-Vergleiche ein. Anstatt Zahlen in Strings umzuwandeln, wandelt PHP 8 wann immer möglich Strings in Zahlen um. Diese Änderung entspricht den Erwartungen und stellt sicher, dass 0 und „e“ nicht mehr als gleich angesehen werden.
Zusammenfassung
Der ==-Operator von PHP kann beim Vergleich zu überraschenden Ergebnissen führen Zeichenfolgen und Zahlen aufgrund der Typumwandlung. Um unerwartetes Verhalten zu verhindern, ist es wichtig, den ===-Operator für strenge Vergleiche zu verwenden. Darüber hinaus verbessert der überarbeitete Ansatz von PHP 8 für String-Zahlen-Vergleiche die Konsistenz und Korrektheit des Codes.
Das obige ist der detaillierte Inhalt vonWarum wird PHPs `0 == 'e'` als wahr ausgewertet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!