1

PHP 5.4.3 で奇妙なバグに遭遇しました

var_dump(false OR true); // boolean true // OK

$a = false OR true;
var_dump($a); // boolean false // !!????

$a = true OR false;
var_dump($a); // boolean true // OK

$a = false || true;
var_dump($a); // boolean true // OK

2番目の結果がどのように出たか知っている人はいますか!?

ありがとう :)

4

2 に答える 2

7

orよりも優先順位and低く なります。=

これは効果的に次のとおりです。

($a = false) OR true;
($a = true) OR false;
$a = (false || true);

これが、人々がor die()構造を使用する傾向がある理由であることに注意してください (実際には、実際にはor trigger_error()'s である必要がありdie、エラーの 's はコード内に存在しません): 左手の代入の結果 ($aこの場合の結果の値) ) はfalse、右辺を実行します。

比較:

$a = false or print("what is going on?");
// prints 'what is going on?', $a === false
$a = true or print("what is going on?");
// prints nothing, $a === true
于 2013-03-07T16:43:32.640 に答える
2

これは、演算子の優先順位と呼ばれます。

こちらをご覧ください

そう

$a = false OR true;

と同じです

($a = false) OR true;

等...

于 2013-03-07T16:43:52.763 に答える