次のコードを試して、&&ととが異なります。
<?php
$keyWord = 2 and 3>4;
$symbol = 2 && 3>4;
echo $keyWord===$symbol ? 'equal' : 'not-equal';
出力:等しくない
なぜ?
次のコードを試して、&&ととが異なります。
<?php
$keyWord = 2 and 3>4;
$symbol = 2 && 3>4;
echo $keyWord===$symbol ? 'equal' : 'not-equal';
出力:等しくない
なぜ?
それらは同じ優先順位を持っていません。完全に括弧で囲まれたコードは次のとおりです。
($keyWord = 2) and (3>4); // $keyWord = 2
$symbol = (2 && (3>4)); // $symbol = false
2
とfalse
は明らかに同じではないので、'not-equal'
。
さて、コードを少し変更して:
<?php
$keyWord = 2 and 3>4;
$symbol = 2 && 3>4;
var_dump($keyWord);
var_dump($symbol);
?>
次の出力を生成します。
int(2) bool(false)
Kolinkが上で指摘しているように、これはオペレーターの優先順位によるものです。
論理演算子の優先順位は次のとおりです(表の一部)
left && logical
left || logical
left ? : ternary
right = += -= *= /= .= %= &= |= ^= <<= >>= => assignment
left and
あなたの場合:
case 1:
$keyWord = 2 and 3>4;
($keyWord = 2) and (3>4);
ここ$keyWord = 2
case 2:
$symbol = 2 && 3>4;
$symbol = (2 && (3>4));
ここ$symbol = false
解決策:$keyWord = (2 and (3>4));
および$symbol = 2 && (3>4);
角かっこを使用する
参照:http://php.net/manual/en/language.operators.precedence.php