0

私は完全に混乱しています。文法レベルで、以下の 2 つのステートメントが異なるのはなぜですか?

$bool1=false;
$bool2=true;

//Statement1
$result=$bool1 or $bool2;  // Returns false

//Statement2
$result=($bool1 or $bool2);  // Returns true

私の知る限り、これらの 2 つのステートメントは完全かつ完全に同一である必要があります。しかし、何らかの理由で、そうではありません。これを回避することはできますが、それらが同一ではないという事実は、言語のいくつかの側面が欠けていることを意味し、どこをチェックすればよいかわかりません。

4

3 に答える 3

3

それは優先ルールによるものです。orよりも優先順位が低い=ため、Statement1 は次のように解析されます。

($result = $bool1) or $bool2;

必要なものを取得するには、||代わりに次を使用します。

$result = $bool1 || $bool2;
于 2013-02-08T22:02:12.137 に答える
2

代入演算子 ( ) は or 演算子 ( )=よりも優先されます。or

$result=$bool1 or $bool2;

最初に $bool1 の $result への代入を実行し (FALSE を与える)、次に $bool2 で or を実行し、結果は FALSE になります

$result=($bool1 or $bool2);

括弧$bool1 or $bool2は最初に強制的に実行されます。これは TRUE です。そして、その値が $result に割り当てられます

違いを示すために、試してみてください

$result=$bool1 || $bool2;

$result=($bool1 || $bool2);

or 演算子 ( ) は、代入演算子 ( )||よりも優先順位が高いためです。=

||これは、との差orが大きいケースの 1 つです。

于 2013-02-08T22:02:00.420 に答える
1

ステートメントは実際には同一であり、同じことを評価します。つまり、行全体(割り当て部分を含む)を印刷する場合です。

$bool1=false;
$bool2=true;

//Statement1
var_dump($result=$bool1 or $bool2);  // Returns true

//Statement2
var_dump($result=($bool1 or $bool2));  // Returns true

違いは割り当てにあります。ステートメント1では、次のように読み取られますが($result = $bool1) or $bool2、ステートメント2は次のように読み取られます。$result = ($bool1 or $bool2)

bool1はfalseであり、bool1はtrueであるため、statement1では、次のよう$result or $bool2に評価されますtrue(ただし、($resultはまだfalseであることに注意してください)

ステートメント2では、最終的にはちょうど$result(そして$resulttrue)になります。

于 2013-02-08T22:04:09.027 に答える