Michael - Hannover: Frage zu Typen + Vergleiche

Hallo !

$show_result = 0;
echo $show_result;  --> ergibt 0 (Typ Integer würd ich sagen)

if (isset($show_result) and $show_result == 'create_db'){
...
}

die Bedingung liefet WAHR

ich frag mich nur warum, sieht jemand den Fehler ?
Wenn ich das Ganze mit "===" mache klappt es, das würde aber
bedeuten

0 == 'string' ergibt wahr

häh ? =) ich bin verwirrt

MfG
Micha

  1. Hallo Michael!

    $show_result = 0;
    echo $show_result;  --> ergibt 0 (Typ Integer würd ich sagen)

    Typ kannst Dir ja auch ausgeben lassen.
    Sollte aber ein integer sein, ja.

    if (isset($show_result) and $show_result == 'create_db')
    die Bedingung liefet WAHR

    Vielleicht hilft Dir ja http://de3.php.net/manual/en/types.comparisons.php.

    MfG
    Götz

    --
    Losung für Mittwoch, 28. Juli 2004
    Ich hatte von dir nur vom Hörensagen vernommen; aber nun hat mein Auge dich gesehen. Darum spreche ich mich schuldig und tue Buße in Staub und Asche. (Hiob 42,5.6)
    Zuletzt von allen ist Christus auch von mir gesehen worden. (1. Korinther 15,8)
    (http://www.losungen.de/heute.php3)
    1. Erstmal danke für den Link, kenne zwar php.net aber diese typen Seite ist recht nützlich

      leider sieht man dort, dass

      der Vergleich

      0 == 'string' false ergeben sollte

      *grübel*

      1. echo $show_result; --> 0
        if (isset($show_result) and $show_result == 25){
        ...
        }

        es passiert nix, weil 0 ungleich 25
        aber müßte dann nicht auch 0 ungleich 'text' sein ??

        ziemlich eigenartige Sache

        MfG
        Micha

        1. Hi!

          echo $show_result; --> 0
          if (isset($show_result) and $show_result == 25){
          ...
          }

          es passiert nix, weil 0 ungleich 25
          aber müßte dann nicht auch 0 ungleich 'text' sein ??

          ja, aber was hat das mit dem code zu tun?

          isset() prüft ob die Variable existiert. Das ergibt immer TRUE wenn die Variable definiert wurde, egal welchen Wert sie enthält(auch 0, FALSE...).

          ziemlich eigenartige Sache

          nein ;-)

          Grüße
          Andreas

          --
          SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
          1. if (isset($show_result) and $show_result == 25){

            da ist ein "and" dazwischen, also theoretisch nur ausführen,
            beide Bedingungen "wahr" sind
            das Problem ist, dass

            ziemlich eigenartige Sache
            nein ;-)

            doch
            ..

            übrigens

            $show_result = 0;

            if (isset($show_result) and $show_result != 'create_db')

            ergibt "false" - also sind nicht beide Bedingungen wahr

            wirkt so, als würde dort statt and OR stehen *grübel*

            1. Hi,

              $show_result = 0;

              if (isset($show_result) and $show_result != 'create_db')

              ergibt "false" - also sind nicht beide Bedingungen wahr

              wirkt so, als würde dort statt and OR stehen *grübel*

              nein. Bei einem Vergleich mittels == bzw. != ignoriert PHP die Typen und führt eine interne Umwandlung des Strings in, in diesem Fall, einen Integer durch, siehe http://de3.php.net/manual/de/language.types.string.php#language.types.string.conversion.

              Was dabei passiert, siehst du, wenn du die Umwandlung mal selbst durchführst:

              <?php

              echo intval('create_db'); // 0

              ?>

              Also ergibt ($show_result != 'create_db') false (denn es gilt nach der internen Umwandlung des Strings (0 == 'create_db'), und somit wird der ganze Ausdruck false. Wie du schon selbst festgestellt hast, ist bei Vergleichen, in denen es auf die Typen ankommt, === bzw. !== zu verwenden.

              Gruß,
              Andreas.

              1. Danke !

                MfG
                Micha

                1. Hi,

                  Noch ein Nachtrag, hat mich mal verwirrt:

                  während (wie Andreas schon schrieb)
                  ("test" == 0) zu TRUE evaluiert
                  wird
                  ("1234test" == 0) zu FALSE.

                  da PHP aus letzterem (1234 == 0) interpretiert...

                  Das sind so Seiten an PHP, die ich wirklich nicht mag.

                  Gruß,
                  Stefan