15

なぜこの印刷2ですか?

echo true ? 1 : true ? 2 : 3;

私の理解では、それは印刷する必要があります1

期待どおりに動作しないのはなぜですか?

4

6 に答える 6

27

あなたが書いたものは次と同じだからです:

echo (true ? 1 : true) ? 2 : 3;

ご存知のように、 1 は​​ に評価されtrueます。

あなたが期待するものは次のとおりです。

echo (true) ? 1 : (true ? 2 : 3);

したがって、このような混乱を避けるために常に中括弧を使用してください。

すでに書いたように、三項式は PHP では連想のままです。これは、最初にから 1 番目が実行され、次に 2 番目が実行されることを意味します。

于 2013-01-08T11:59:46.607 に答える
3

不明な場合は括弧を使用してください。

PHP の三項演算子は、他の言語とは対照的に左結合であり、期待どおりに機能しません。

于 2013-01-08T12:00:09.707 に答える
3

2 番目の三項句は括弧で区切ります。

echo true ? 1 : (true ? 2 : 3);
于 2013-01-08T12:00:11.797 に答える
2

ドキュメントから

Example #3 Non-obvious Ternary Behaviour
<?php
// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
echo ((true ? 'true' : false) ? 't' : 'f');

// here, you can see that the first expression is evaluated to 'true', which
// in turn evaluates to (bool)true, thus returning the true branch of the
// second ternary expression.
?>
于 2013-01-08T12:00:29.870 に答える