Logische Operatoren in if ... else ...
planloser
- php
hi
wie kann man logische operatoren (und, oder) in verbindung mit If-Else nutzen??
z.B.
if (!$nr = $_GET['nr'] or $nr<=1 ){$nr=1;};
es funktioniert zwar, bin mir aber nicht sicher, ob das auch sauber geschrieben ist.
Hi,
if (!$nr = $_GET['nr'] or $nr<=1 ){$nr=1;};
Im Prinzip müsste das einigermaßen OK sein, wobei ich für die Zukunft (Übersichtlichkeit) eine saubere(re) Klammerung vorschlagen würde, Extremvariante
if ((!($nr = $_GET['nr'])) or ($nr <= 1))
--> Man weiß worauf das ! wirkt (ganze Klammer) und welche Teile zum Ausdruck gehören. Spätestens wenn du NOT, AND und OR mischt werden die Klammern sehr wichtig.
Dann ist es IMHO unüblich or/and als Operatoren einzusetzen, in der Praxis dürfte sich && für and und || für or durchgesetzt haben.
MfG
Rouven
Hallo Rouven.
if ((!($nr = $_GET['nr'])) or ($nr <= 1))
Was soll der erste Teilausdruck für einen Sinn ergeben?
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
if ((!($nr = $_GET['nr'])) or ($nr <= 1))
Was soll der erste Teilausdruck für einen Sinn ergeben?
ah, right, got it. Nicht genau genug hingesehen. Hey, das ist doch auch unfair, der Betreff lautete logische Operatoren, da kann doch einer verlangen, dass ich auch auf solche Fehler im Hintergrund-Rauschen achte... ;-)
MfG
Rouven
Hi,
if ((!($nr = $_GET['nr'])) or ($nr <= 1))
Was soll der erste Teilausdruck für einen Sinn ergeben?
Es erfolgt die Zuweisung von $_GET['nr'] an $nr, dann wird ausgewertet, ob der Wert true oder false ergibt und das dann noch mit dem ! negiert.
cu,
Andreas
Hallo MudGuard.
if ((!($nr = $_GET['nr'])) or ($nr <= 1))
Was soll der erste Teilausdruck für einen Sinn ergeben?
Es erfolgt die Zuweisung von $_GET['nr'] an $nr, dann wird ausgewertet, ob der Wert true oder false ergibt und das dann noch mit dem ! negiert.
Ja, das habe ich mir im Nachhinein auch zusammengereimt; $nr müsste deshalb nach der Zuweisung den Wert „“ oder „0“ haben, damit dieses dank Typenumwandlung zu Boolean und der Negation true zurückgeben kann.
Aber einen Sinn erkenne ich darin immer noch nicht.
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
Ja, das habe ich mir im Nachhinein auch zusammengereimt; $nr müsste deshalb nach der Zuweisung den Wert „“ oder „0“ haben, damit dieses dank Typenumwandlung zu Boolean und der Negation true zurückgeben kann.
Aber einen Sinn erkenne ich darin immer noch nicht.
Hier in diesem konkreten Fall vielleicht nicht.
Aber oft ist es so, daß Funktionen 0 oder false im "Fehlerfall" zurückliefern, ansonsten irgendein Objekt.
Da kann man das gut ausnützen.
while ($row = mysql_fetch_row($result))
{
echo $row['bla'];
}
ist ja im Prinzip das gleiche (der Zuweisungswert wird als Bedingung ausgewertet).
Solange es noch eine weitere Zeile gibt, liefert mysql_fetch... einen von 0 (bzw. false) verschiedenen Wert - es wird ein weiterer Schleifendurchgang gestartet, dort steht die Zeile in $row zur Verfügung.
Gibt es keine weitere Zeile, kommt false dabei raus, die Schleife wird abgebrochen ...
cu,
Andreas
Hallo planloser.
if (!$nr = $_GET['nr'] or $nr<=1 ){$nr=1;};
es funktioniert zwar, bin mir aber nicht sicher, ob das auch sauber geschrieben ist.
Dass dies funktioniert verwundert mich allerdings ein wenig. Du meintest sicher folgendes:
if ($nr != $_GET['nr'] or $nr <= 1) {
$nr = 1;
}
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
Dass dies funktioniert verwundert mich allerdings ein wenig.
das wundert dich weshalb? Wenn PHP den Vergleich vor der Negation abarbeitet sind die beiden doch gleichwertig, oder nicht? Laut Operator Precedence müsste es das...
MfG
Rouven
Hallo Rouven.
Dass dies funktioniert verwundert mich allerdings ein wenig.
das wundert dich weshalb?
Einen schönen Sonntag noch.
Gruß, Ashura