PHP ist krank…
Über einen Blogbeitrag von Fefe bin ich auf dieses “interessante” Verhalten in PHP aufmerksam geworden. Was schätzt ihr, gibt folgendes Programm aus?
echo (md5("240610708") == md5("QNKCDZO")) ? "GLEICH" : "UNTERSCHIEDLICH";
Na?
Die Sache wird bei HackerNews etwas intensiver diskutiert. Das Problem besteht im Grunde darin, dass PHP das “0e” am Anfang als Präfix interpretiert und die Daten daher als Float-Value verwendet.
Am besten gefällt mir aber der folgende Lösungvorschlag aus der HackerNews-Diskussion:
perhaps ==== operator must reserved
php_real_equivalence_4()
But it must invoke with additional NULL-parameter to achieve real effect and analyse return value for TRUE, FALSE, NULL:
php_real_equivalence_4($x, $y, null);Except they had to call it php_real_equivalnce_4() because php_real_equivalence_4() was taken.
Am 6. Mai 2015 um 12:00 Uhr
und dann ändert sich sowas auch noch gerne in jeder Version… siehe: http://3v4l.org/ZSq5G
Am 7. Mai 2015 um 10:27 Uhr
Workaround: Vergleich mit ===
Aber ja, ist broken. Bug bei php.net mal dafür aufgemacht?