PHP-Code zum Verzweifeln

with tags Open Source Rant Softwareschrott Technik -

Heute gibts mal wieder ein Codeschnipsel das Anfänger wohl zum Verzweifeln treiben würde.
Die folgende, syntaktisch als richtig gewertete Befehlsfolge steht zur Diskussion:


$blah="tröööt";
if($blah != 0)
{
if($blah=="tröööt")
{
echo "Sie haben getrötet!";
} else {
echo 'Sie haben "'.$blah.'" gesagt.';
}
} else {
echo "Sie haben eine 0 eingegeben";
}

Was wird PHP wohl ausgeben? Wer die Antwort findet bekommt einen Gummipunkt!
Richtig! Es ist "Sie haben eine 0 eingegeben". Der Grund ist ebenfalls offensichtlich, "tröööt" ist keine Zahl.

Importierte/Alte Kommentare:

#688: 30.Sep.2008 04:09 von Thomas

Ans Ende der Zeile:
$blah="tröööt"
muss soweit ich weiß noch ein Semikolon, richtig?
Sicherlich nur ein Tippfehler...

#690: 27.Oct.2008 02:10 von tammo

Tja das kommt, weil php so anfänger-freundlich ist was die Typengerechtheit angeht. Php versucht rauszufinden, was wir eigentlich meinen mit == deswegen wird aus "1" == 1 auch true obwohl es schlicht falsch ist. Was bei "true" == true oder "true" == 0 noch hilfreich ist, wird bei "trööt" != 0 schon zum problem..

Will man ordentlich vergleichen helfen nur === und !== .

  • #691: 27.Oct.2008 10:10 von profmakx

    Das hat nichts, aber auch gar-nichts mit anfängerfreundlichkeit zu tun, die Sprache und ganz besonders das Typensystem ist einfach nur kaputt.
    und jetzt haben sie auch noch namespaces. namespaces mit \ als... ich muss schnell kotzen gehen

    • #692: 27.Oct.2008 10:10 von Friedenspanzer

      Seltsame Namespaces kenn ich von der Arbeit (Das Ding, mit dem ich Geld verdiene), ich find das richtig dufte :-)

      Find aber auch toll, dass eine Programmiersprache ein altes Konzept ein klein wenig anders anmalt und alle es böse finden. Ganz ehrlich, tut es körperlich weh dass man in PHP \ statt :: schreiben muss?

      • #693: 27.Oct.2008 10:10 von Dr. Azrael Tod

        warte mal... PHP und :: da war doch was...
        achja Unexpected Paamayim Nekudotayim -.-
        PHP geht nicht einfach nur anders an solche Konzepte heran.. PHP muss alles unbedingt anders machen, das ist ein großer Unterschied.

        Ich habe nichts dagegen wenn mal 1-2 Bezeichner anders lauten oder mal eine Lösung anders angegangen wird, aber PHP geht mir permanent aufs Schwein wenn alles unbedingt von allen anderen Sprachen gleich gelöste unter PHP anders lauten muss.. ohne etwas an der Funktionalität zu ändern.
        Kurz: Änderungen gerne, aber sie müssen einen Zweck erfüllen.

      • #694: 27.Oct.2008 10:10 von profmakx

        Wie man einen Namespace nun bezeichnet ist erstmal egal. Ob es nun unbedingt ein BACKSLASH sein muss, das ja wegen Escape-sequenzen durchaus andere auswirkungen haben kann sei mal dahingestellt. Wahrscheinlich spielt da eine seltsame windows-pfad-analogie mit.

        Ich glaube aber nicht einmal, dass Namespaces eine tolle Idee (tm) sind. Im Prinzip propft man damit nur einen weiteren Komplexitätslevel in die Sprache rein, den man nicht braucht.
        Wenn man sauber zusammengehaltene Module hat die man importieren kann und diese beim importieren umbenennen kann (wegen Namenskollisionen und zur Abkürzung. Zum Beispiel importiere ich in Haskell oft so: qualified Data.Map as M oder aehnliches)

    • #695: 27.Oct.2008 03:10 von tammo

      Anfänger freundlich war villeicht das falsche Wort..
      Also mir persönlich ist es egal, ob :: oder \ wobei ich Dr. Azrael Tod eher zustimme und Änderungen ihren Zweck erfüllen sollten.

Geschrieben von Dr. Azrael Tod