Kategorien
Emo Technik

Gleich ist nicht immer gleich

Das ist eigentlich allgemein bekannt, aber ich muss nur mal kurz meinen PHP-Frust loswerden. Ich durfte heute zu meinem Leidwesen feststellen, dass var_dump(10 == "10,5") als Ergebnis bool(true) ausgibt.

Das liegt ganz einfach daran, dass PHP anscheinend, wenn es zwei Strings vergleicht, die wie Integers aussehen (oder einen Integer mit einem String), diese zuerst in Integers umwandelt. Das ist historisch darin begründet, dass früher PHP quasi nur mit Strings gearbeitet hat, weil Browser auch nur Strings herüberschicken. Dafür hat PHP dann später auch den genauen Vergleich mittels === eingeführt. Der prüft auch darauf, ob die beiden Werte vom gleichen Typ sind.

Aber noch fieser wird es, weil ich die Keys von einem Array mit Strings vergleichen wollte. Ich dachte mir, ich achte einfach darauf, dass die Keys als Strings aufgebaut werden und mache dann einen strengen Vergleich. Tja, das würde ja funktionieren, wenn PHP nicht auch automagisch alle Array-Keys, die wie eine Integer aussehen, in einen Integer umwandeln würde, was sich nur über fiese Verrenkungen verhindern lässt.

Es wird also aus

array(
    "1" => "eins"
);

einfach so

array(
    1 => "eins"
);

gemacht.

Danke Obama PHP!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert