Moin!
Was du schreibst ist sicher richtig, allein ich kapiere es nicht. Die (theoretische) Frage aus meiner Sicht war allein, wann denn if ($x == false)
eine expliziten Schreibweise mit "===" überlegen wäre bzw. weniger fehleranfällig. Bzw. in wie weit sich das Argument von Crockford in Bezug auf Javascript und die Nutzung von "==" vs. "===" auf PHP übertragen lässt. Der Punkt ist da ja die Eindeutigkeit beim Lesen des Codes.
Crockfords Ansatz bei Javascript ist, die kritikwürdige Erfindung der Sprache in nur 10 Tagen dahingehend abzumildern, dass man um all diese fragwürdigen "Features" freiwillig einen großen Bogen macht, bzw. absichtlich Uneindeutigkeiten durch sprachlich überflüssiges Hinzufügen von Syntax verständlicher und eindeutiger macht. "Implizit" ist böse, "explizit" ist besser.
Da PHP vermutlich auch solch eine Sprache mit kritikwürdigen Stellen ist (wenngleich es länger gedauert hat, sie zu erfinden), ist derselbe Ansatz auch hier möglich, und ich würde ihn vorbehaltlos unterstützen: Finger weg von Uneindeutigkeiten (beispielsweise sollten IF und Schleifen ihren Codeblock IMMER mit geschweiften Klammern umschließen, auch wenn es nur ein Statement ist), "explizit" ist besser als "implizit".
Für Javascript gibts "JSLint", in PHP den "PHP_Codesniffer" mit diversen modularen Checks. Und eine endlose Diskussion in jeder Entwicklergruppe, welchen Coding Style man denn benutzen will.
Und genau das haben wir hier auch: Die Diskussion wird nicht beendbar sein, weil das einzige verifizierbare Argument "Es funktioniert korrekt" ist, und alles andere lediglich auf der gefühlten Problematik basiert, die aber nicht quantifizierbar ist.
Obwohl ich also dazu tendiere, lieber den Äquivalenzvergleich === zu verwenden, kann man daraus keine generelle Regel machen, weil manche Vergleiche damit nicht funktionieren.
Und das schließt die Frage des Lesenden ein, ob der Autor hier "==" benutzt hat, weil er alle o.g. Fälle mit einschließen möchte, oder ob er es "nur" aus "Faulheit" nutzt, weil er nicht weiß, ob da ein "", 0, "0", leeres Array oder sonstwas, was nach bool-gecastet zu false wird.
Diese Frage stellt sich eben nur selten. Das wäre mein in kryptische Worte gegossenes Gegenargument gewesen: Wenn man Code schreibt, bei der es einen Unterschied macht, ob man == oder === benutzt, und der Unterschied erschließt sich nicht sofort, sondern es kommen Zweifel auf, ob der Code korrekt ist bzw. eigentlich die jeweils andere Variante gemeint war, der hat vorher und um diese Codestelle drumherum schon viel falsch gemacht. Das wiederum ist komplett auf Crockfords Linie, dass man Uneindeutigkeiten vermeiden sollte.
- Sven Rautenberg