Inkonsistente Vergleiche in PHP

Published 6 September, 2012

Nach kurzem googlen findet man reichlich Gründe, warum die Sprache PHP einem schlechten Design unterliegt. Dies fängt bei inkonsistenten Funkionsnamen an und geht bis zur schlechen Dokumentation.

Mein persönlicher Favorit sind hierbei die inkonsistenten Vergleichsergebnisse von verschiedenen Variable. Klar, bei "1 = 1" verschluckt sich PHP noch nicht, aber was ich mit folgendem?

<?php
echo array() == 0 ? 1 : 0;
echo false == 0 ? 1 : 0;

Die Ausgabe ist "101". D.h. ein leeres Array ist gleich "false", aber nicht gleich "0". "false" ist jedoch gleich mit "0".

Das kann man jedoch verhinden, indem man noch den gleichen Typen vergleicht. Hierfür gibt es neben dem normalen Operator == noch den Operator ===, welcher genau dies tut. (Sauberer) Nebeneffekt ist hierbei, dass so Undinge wie der Vergleich von dem String "1" und der Zahl 1 ebenfalls false sind. In formalem PHP-speak überprüft man übrigens beim Operator "==", ob die Variablen gleich (equal) sind und beim Operator "===", ob sie identisch (identical) sind (siehe hier). Lustig, laut Duden ist "identisch" ein Synonym für "gleich". Aber was solls ;-)

Mein eingereichter PHP-Patch feiert übrigens bald sein dreimonatiges zweijähriges Bestehen, steht immernoch auf "Open" und wurde noch keinem Entwickler zugewiesen.