Verwenden von AND / OR in wenn sonst PHP-Anweisung


73

Wie verwendet man 'AND / OR' in einer if else PHP-Anweisung? Wäre es:

1) UND

if ($status = 'clear' AND $pRent == 0) {
    mysql_query("UPDATE rent 
                    SET dNo = '$id', 
                        status = 'clear', 
                        colour = '#3C0' 
                  WHERE rent.id = $id");
} 

2) ODER

if ($status = 'clear' OR $pRent == 0) {
    mysql_query("UPDATE rent 
                    SET dNo = '$id', 
                        status = 'clear', 
                        colour = '#3C0' 
                  WHERE rent.id = $id");
} 

Wie wird das funktionieren? $items_list = array(2,177); $rules_list = array( '[(13 OR 3 OR 2 )]', '[(54 OR 77 ) AND 17 AND 59 AND 36 ] OR [(2 AND 36 )]', '[(2 OR 3 OR 13 ) AND 30 ]', '[(2 )] OR [(13 OR 4 ) AND (17 )]', '[(2 )] OR [(13 OR 3 ) AND 17 ]', '[(2 AND 30 ) OR (3 AND 30 )]', ); // Berechne das Bool-Ergebnis jeder Regel mit dem bereitgestellten Item-Array`
Bhargav Patel

Antworten:


129

Ja. Die Antwort ist ja.
http://www.php.net/manual/en/language.operators.logical.php


Zwei Dinge:

  • Viele Programmierer bevorzugen &&und ||anstelle von andund or, aber sie arbeiten gleich (vorrangig).
  • $status = 'clear'sollte wohl sein $status == 'clear'. =ist Zuordnung, ==ist Vergleich.

141
Und nur zur Vervollständigung ===dient es dem Typ + Wert-Vergleich. Zukünftig wird PHP auch beinhalten, ====zu überprüfen, ob die Klassen von demselben Programmierer geschrieben wurden, =====um sicherzustellen, dass sie am selben Tag geschrieben wurden, und ======um sicherzustellen, dass der Programmierer zu der Zeit Hosen trug.
AgentConundrum

24
@Agent Ich würde hinzufügen =============, um sicherzustellen, dass sich die Projektspezifikation seit dem Schreiben des Codes nicht geändert hat.
Täuschung

9
@deceze - Gut, aber nur, wenn es immer zurückkommtFALSE
AgentConundrum

25
@AgentConundrum: Kann ich verwenden, !=====wenn ich sicherstellen möchte, dass der Programmierer keine Hosen trägt?
Asaph

28
@deceze: Das Nicht-Tragen von Hosen ist für das Geschäftsmodell einiger der beliebtesten Websites im Internet von zentraler Bedeutung. ;)
Asaph

17

Ein bisschen spät, aber egal ...
die Frage ist "Wie benutzt man ...?" Die kurze Antwort lautet: Sie machen es richtig


Die andere Frage wäre "Wann benutzt du es?"
Ich benutze &&anstelle von ANDund ||anstelle von OR.

$a = 1
$b = 3

Jetzt,

if ($a == 1 && $b == 1) { TRUE } else { FALSE }

In diesem Fall ist das Ergebnis "FALSE", da B nicht 1 ist. Was wäre, wenn

if ($a == 1 || $b == 1) { TRUE } else { FALSE }

Dies gibt "TRUE" zurück, auch wenn B immer noch nicht der von uns angeforderte Wert ist. Es gibt eine andere Möglichkeit, TRUE ohne die Verwendung von OR / || zurückzugeben und das wäre XOR

if ($a == 1 xor $b == 1) { TRUE } else { FALSE }

In diesem Fall muss nur eine unserer Variablen wahr sein, ABER NICHT BEIDE, wenn beide WAHR sind, wäre das Ergebnis FALSCH.

Ich hoffe das hilft...

mehr unter:
http://www.php.net/manual/de/language.operators.logical.php


15

Es gibt einige Scherze und irreführende Kommentare, sogar teilweise falsche Informationen in den Antworten hier. Ich möchte versuchen, sie zu verbessern:

Erstens , wie einige betont haben, haben Sie einen Fehler in Ihrem Code, der sich auf die Frage bezieht:

if ($status = 'clear' AND $pRent == 0)

sollte sein (beachten Sie die ==statt =im ersten Teil):

if ($status == 'clear' AND $pRent == 0)

was in diesem Fall funktional äquivalent zu ist

if ($status == 'clear' && $pRent == 0)

Zweitens ist zu beachten, dass diese Operatoren ( and or && ||) Kurzschlussoperatoren sind. Das heißt, wenn die Antwort mit Sicherheit aus dem ersten Ausdruck bestimmt werden kann, wird der zweite niemals ausgewertet. Auch dies spielt für Ihre obige debuggte Zeile keine Rolle, aber es ist äußerst wichtig, wenn Sie diese Operatoren mit Zuweisungen kombinieren, weil

Drittens ist der wahre Unterschied zwischen and orund && ||die Priorität des Operators . Insbesondere ist es wichtig, dass sie && ||eine höhere Priorität als die Zuweisungsoperatoren ( = += -= *= **= /= .= %= &= |= ^= <<= >>=) haben, während sie and oreine niedrigere Priorität als die Zuweisungsoperatoren haben. In einer Aussage, die die Verwendung von Zuweisung und logischer Bewertung kombiniert, ist es daher wichtig, welche Sie wählen.

Geänderte Beispiele von der PHP-Seite zu logischen Operatoren :

$e = false || true;

wird truediesen Wert auswerten und ihm zuweisen $e, da er ||eine höhere Operatorpriorität als =hat und daher im Wesentlichen wie folgt ausgewertet wird :

$e = (false || true);

jedoch

$e = false or true;

wird zuweisen falsezu $e(und dann die Durchführung orBetrieb und zu bewerten , trueda) =als höheren Operator Vorrang hat or, im wesentlichen wie diese Auswertung:

($e = false) or true;

Die Tatsache, dass diese Mehrdeutigkeit sogar besteht, lässt viele Programmierer einfach immer verwenden && ||und dann funktioniert alles klar, wie man es in einer Sprache wie C erwarten würde, dh. zuerst logische Operationen, dann Zuordnung.

Einige Sprachen wie Perl verwenden diese Art von Konstrukt häufig in einem ähnlichen Format:

$connection = database_connect($parameters) or die("Unable to connect to DB.");

Dies würde theoretisch die Datenbankverbindung zuweisen $connection, oder wenn dies fehlschlägt (und wir gehen hier davon aus, dass die Funktion etwas zurückgibt, das falsein diesem Fall bewertet wird), wird das Skript mit einer Fehlermeldung beendet. Wenn aufgrund eines Kurzschlusses die Datenbankverbindung erfolgreich ist, die()wird die nie ausgewertet.

Einige Sprachen, die dieses Konstrukt direkt zulassen, verbieten Zuweisungen in bedingten / logischen Anweisungen (wie Python), um die Amiguität umgekehrt zu entfernen.

PHP hat beides zugelassen, sodass Sie nur einmal etwas über Ihre beiden Optionen lernen und dann codieren müssen, wie Sie möchten, aber hoffentlich sind Sie auf die eine oder andere Weise konsistent.

Wenn Sie Zweifel haben, setzen Sie einfach einen zusätzlichen Satz Klammern ein, um alle Unklarheiten zu beseitigen. Diese werden immer gleich sein:

$e = (false || true);
$e = (false or true);

Mit all diesem Wissen bewaffnet, bevorzuge ich die Verwendung, and orweil ich der Meinung bin, dass dadurch der Code besser lesbar wird. Ich habe nur die Regel, Zuordnungen nicht mit logischen Auswertungen zu kombinieren. Aber an diesem Punkt ist es nur eine Präferenz, und Konsistenz ist hier viel wichtiger als die Seite, für die Sie sich entscheiden.


perfekte Antwort!
Ahmad Mobaraki

9

Sie haben hier 2 Probleme.

  1. verwenden ==zum Vergleich. Sie haben verwendet, =was für die Zuordnung ist.

  2. Verwenden Sie &&für "und" und ||für "oder". andund orwird funktionieren, aber sie sind unkonventionell.


Es ist selten, aber vielleicht wollten sie in diesem Zustand zuweisen: P Obwohl ich wette, haben sie es nicht getan.
Alex

1
@alex: Sicher nicht im Fall von if ($status = 'clear' OR $pRent == 0) {. In diesem Fall ist die zweite Bedingung nicht erreichbar. Es muss ein Fehler sein.
Asaph

Ja, definitiv nicht mit dem OR.
Alex



2

für UND du verwendest

if ($status = 'clear' && $pRent == 0) {
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 

für ODER verwenden Sie

if ($status = 'clear' || $pRent == 0) {
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
} 

0

Ich glaube, ich habe hier ein bisschen Verwirrung. :) Aber anscheinend hat sonst niemand ..

Fragen Sie, welche in diesem Szenario verwendet werden soll? Wenn ja, dann und ist die richtige Antwort .

Wenn Sie fragen, wie die Bediener arbeiten, dann

In PHP sowohl AND, && und OR, || wird auf die gleiche Weise funktionieren. Wenn Sie neu in der Programmierung sind und PHP eine Ihrer ersten Sprachen ist, empfehle ich die Verwendung von UND und ODER, da dies die Lesbarkeit erhöht und Verwirrung beim erneuten Überprüfen verringert. Wenn Sie jedoch bereits mit anderen Sprachen vertraut sind, haben Sie möglicherweise bereits die && und || vertraut gemacht Betreiber.


Das ist einfach falsch. UND / ODER haben eine niedrigere Priorität als die Zuweisung, während && / || haben höhere Priorität. Das klassische Beispiel: $e = false || true;vs $e = false or true;. Der erste wird als wahr bewertet, der zweite als falsch.
Redreinard

0
<?php
$val1 = rand(1,4); 
$val2=rand(1,4); 

if ($pars[$last0] == "reviews" && $pars[$last] > 0) { 
    echo widget("Bootstrap Theme - Member Profile - Read Review",'',$w[website_id],$w);
} else { ?>
    <div class="w100">
        <div style="background:transparent!important;" class="w100 well" id="postreview">
            <?php 
            $_GET[user_id] = $user[user_id];
            $_GET[member_id] = $_COOKIE[userid];
            $_GET[subaction] = "savereview"; 
            $_GET[ip] = $_SERVER[REMOTE_ADDR]; 
            $_GET[httpr] = $_ENV[requesturl]; 
            echo form("member_review","",$w[website_id],$w);?>
        </div></div>

Ich habe das 'else' durch '&&' ersetzt, damit beide platziert werden ... argh


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.