bjoern: Drei Abfragebedingungen in if-Schleife

Hallo.

Eine if-Schleife soll ausgeführt werden wenn $var1 oder var2 wahr sind, var3 aber nicht wahr ist:

if($var1 or $var2 and !$var3)

Ist das richtig so? Bei mir wird die Schleife auch aufgerufen, wenn $var3 wahr ist...

Wo liegt der Fehler?

Gruß
Björn

  1. Hallo Björn,

    if($var1 or $var2 and !$var3)
    Ist das richtig so? Bei mir wird die Schleife auch aufgerufen, wenn $var3 wahr ist...

    dann setz mal Klammern, um den Ausdruck eindeutiger zu machen:
       if (($var1 or $var2) and !$var3)
    Das halte ich generell für eine gute Idee, auch weil es dem Leser die Logik des Ausdrucks deutlicher vermittelt - selbst dann, wenn die Klammern nicht unbedingt nötig wären.

    Offensichtlich bindet der UND-Operator stärker (hat eine höhere Priorität) als der ODER-Operator, so dass die klammerfreie Version intern als
       if ($var1 or ($var2 and !$var3))
    ausgewertet wird. In diesem Fall wäre der Gesamtausdruck schon wahr, wenn nur $var1 wahr ist, und der Rest wird dann gar nicht mehr beachtet.

    So long,
     Martin

    --
    Lebensmotto der Egoisten:
    Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
    1. Hallo Martin!

      dann setz mal Klammern, um den Ausdruck eindeutiger zu machen:
         if (($var1 or $var2) and !$var3)

      Mit den Klammern hats geklappt, danke.
      Zum Thema if-"Schleife": Jau, ist natürlich keine Schleife.. War mir so "rausgerutscht" :D

      Gruß Björn

  2. Hallo Björn,

    Eine if-Schleife soll ausgeführt werden wenn $var1 oder var2 wahr sind, var3 aber nicht wahr ist:

    Dann schreibst du das am besten auch so in PHP:

      
    if(  
      $var1 or $var2 // wenn $var1 oder var2 wahr sind  
    )  
    
    
      
    if(  
      ($var1 or $var2) // wenn $var1 oder var2 wahr sind,  
      and              // und  
      !$var3           // var3 aber nicht wahr ist  
    )  
    
    

    Wo liegt der Fehler?

    Operatoren haben eine Rangfolge. Die ist dafür verantwortlich, dass zuerst "$var and ! $var3" auswertet wird. Durch das Setzen von Klammern kann man die Abfolge der Auswertung aber ändern.

    Was die "IF-Schleife" angeht, solltest du mal in die
    PHP-FAQ kucken. ;-)

    MffG
    EisFuX

    --
    ... Suchmaschinen-Blog ...
  3. Hello out there!

    Eine if-Schleife […]

    „Da soll nochmal jemand sagen, es gäbe keine if-Schleife …“ [MudGuard]

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)