Drei Abfragebedingungen in if-Schleife
bjoern
- php
0
Der Martin
0 bjoern
0 EisFuX0
Gunnar Bittersmann
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
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
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
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
Hello out there!
Eine if-Schleife […]
„Da soll nochmal jemand sagen, es gäbe keine if-Schleife …“ [MudGuard]
See ya up the road,
Gunnar