web-dev-qa-db-ja.com

if else PHPステートメントでAND / ORを使用する

If else PHPステートメントで「AND/OR」をどのように使用しますか?それでしょうか:

1)AND

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

2)または

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

はい。答えはイエスです。
http://www.php.net/manual/en/language.operators.logical.php


ただし、次の2つです。

  • 多くのプログラマーは、andorではなく&&||を好みますが、同じように機能します(優先的に安全です)。
  • $status = 'clear'はおそらく$status == 'clear'でなければなりません。 =は割り当て、==は比較です。
107
deceze

ここでの回答には、冗談や誤解を招くコメント、部分的に不正確な情報も含まれています。私はそれらを改善したいと思います:

最初に、いくつかの人が指摘したように、質問に関連するコードにバグがあります:

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

(最初の部分の==の代わりに=に注意してください):

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

このこの場合は機能的に同等です

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

Second、これらの演算子(and or && ||)は短絡演算子であることに注意してください。つまり、最初の式から回答を確実に決定できる場合、2番目の式は評価されません。繰り返しますが、これは上記のデバッグ行には関係ありませんが、これらの演算子を割り当てと組み合わせる場合は非常に重要です。

3番目and or&& ||の本当の違いは、 演算子の優先順位 です。特に重要なのは、&& ||の優先順位が代入演算子(= += -= *= **= /= .= %= &= |= ^= <<= >>=)より高いことと、and orの優先順位が代入演算子より低いことです。したがって、割り当てと論理評価の使用を組み合わせたステートメントでは、どちらを選択するかが重要になります。

PHPの論理演算子のページ からの変更例::

$e = false || true;

$e||よりも演算子の優先順位が高いため、trueに評価され、その値を=に割り当てます。したがって、基本的には次のように評価されます。

$e = (false || true);

しかしながら

$e = false or true;

$efalseよりも演算子の優先順位が高く、基本的に次のように評価されるため、or=に割り当てます(そしてtrue操作を実行してorを評価します)。

($e = false) or true;

このあいまいさが存在するという事実により、多くのプログラマーは常に&& ||を使用するようになり、Cなどの言語で期待されるようにすべてが明確に機能します。最初に論理演算、次に割り当て。

Perlのようないくつかの言語は、このような構成を次のような形式で頻繁に使用します。

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

これは、理論的にはデータベース接続を$connectionに割り当てるか、失敗した場合(そして、この場合、関数はfalseにevaluesするものを返すと仮定します)、エラーメッセージでスクリプトを終了します。短絡のため、データベース接続が成功した場合、die()は評価されません。

この構成を可能にする一部の言語では、条件付き/論理ステートメント(Pythonなど)での割り当てを禁止して、逆にあいまいさを排除しています。

PHPは両方を許可するようになったため、2つのオプションについて一度学習してから、好きなようにコーディングするだけで済みますが、何らかの形で一貫性が保たれることを願っています。

疑わしいときはいつでも、余分な括弧を追加するだけで、すべての曖昧さがなくなります。これらは常に同じです。

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

そのような知識をすべて備えて、コードを読みやすくするためにand orを使用することを好みます。割り当てと論理評価を組み合わせないというルールがあります。しかし、その時点ではそれは単なる好みであり、一貫性はここでどちらを選ぶかよりも重要です。

11
redreinard

ここには2つの問題があります。

  1. 比較には==を使用します。割り当て用の=を使用しました。

  2. 「and」には&&を、「or」には||を使用します。 andおよびorは機能しますが、型破りです。

9
Asaph

ANDは&&であり、ORはCのように||です。

6
Dan D.

ANDおよびORは、JavaScriptや他のCスタイルの構文言語のように、&&および||の単なる構文上の砂糖です。

It ANDおよびORの優先順位が低いように見えます 同等のCスタイルよりも。

4
alex

aNDを使用します

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

ORを使用します

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

ここで少し混乱していると思います。 :)しかし、誰も持っていないようです..

このシナリオで使用するものを尋ねていますか?はいの場合そして正解です

演算子がどのように機能しているかについて質問している場合、

PHPでは、AND、&&OR、の両方が同じように機能します。プログラミングの初心者で、phpが最初の言語の1つである場合、ANDとORを使用することをお勧めします。これは、読みやすくするために読みやすさと混乱を減らすためです。ただし、すでに他の言語に精通している場合は、&&および||を既に理解している可能性があります。演算子。

0
Anush Prem
<?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>

iveは 'else'を '&&'に置き換えたため、両方が配置されます... argh