なぜこの印刷2
ですか?
echo true ? 1 : true ? 2 : 3;
私の理解では、それは印刷する必要があります1
。
期待どおりに動作しないのはなぜですか?
なぜこの印刷2
ですか?
echo true ? 1 : true ? 2 : 3;
私の理解では、それは印刷する必要があります1
。
期待どおりに動作しないのはなぜですか?
あなたが書いたものは次と同じだからです:
echo (true ? 1 : true) ? 2 : 3;
ご存知のように、 1 は に評価されtrue
ます。
あなたが期待するものは次のとおりです。
echo (true) ? 1 : (true ? 2 : 3);
したがって、このような混乱を避けるために常に中括弧を使用してください。
すでに書いたように、三項式は PHP では連想のままです。これは、最初に左から 1 番目が実行され、次に 2 番目が実行されることを意味します。
不明な場合は括弧を使用してください。
PHP の三項演算子は、他の言語とは対照的に左結合であり、期待どおりに機能しません。
2 番目の三項句は括弧で区切ります。
echo true ? 1 : (true ? 2 : 3);
ドキュメントから
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.
?>