Kurrioser Effekt bei Vergleich mit logischen Operatoren

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by 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)

    Comment


    • #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.

      Comment


      • #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.

        Comment

        Working...
        X