Kurrioser Effekt bei Vergleich mit logischen Operatoren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kurrioser Effekt bei Vergleich mit logischen Operatoren

    Hallo zusammen,

    ich habe in meinem Script diesen Vergleich eingebaut
    PHP-Code:
    if($key != "type") {
        
    $foobar 1;

    Dabei ist $key ein Schlüssel eines Array. Wenn nun $key = 0; ist, dann stimmt irgendetwas nicht.
    Bei mir gibt:
    PHP-Code:
    var_dump(!= "type");
    // bool(false) 
    Kann es mir nicht erklären, woraus dies resultiert. Nach meiner Vorstellung müsste es doch true ergeben. Wenn ich aber den Typenvergleich (!==) hinzunehme klappt es.

    Danke für den Tip

    PS: hatte noch keine Zeit um eine andere PHP Version ($myPhpVersion = 4.4.4) zu testen
    Zuletzt geändert von snowgarden; 28.12.2006, 06:13.

  • #2
    Type Casting ! PHP versucht den String zu einem Integer zu konvertieren. Bei ersten Zeichen das sich nicht in ein String Zeichen abbilden lässt, macht php eine 0 draus. Also vergleichst du eigentlich das
    PHP-Code:
    var_dump(!= 0); 
    und dafür ist false korrekt. Nur === und !== verhindern eine Type Casting seitens von PHP und das erwartete Verhalten ist wieder hergestellt.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      ...wobei es immer noch zum unfug kommen kann, wenn man auf die kodierung der strings achten muss. daher: strcmp() ist immer die bessere wahl zum vergleichen von strings.

      Kommentar


      • #4
        Besten Dank,

        ist jetzt klar. Diese Typenumwandlung macht einem in vielen Fällen das Leben einfach, doch erschwert es manchmal die Problemstellung um ein vielfaches.

        Kommentar

        Lädt...
        X