PHP多个三元运算符工作不正常(PHP multiple ternary operator not

2019-07-18 00:02发布

这是为什么打印2

echo true ? 1 : true ? 2 : 3;

随着我的理解,它应该打印1

为什么工作不正常?

Answer 1:

因为你写的是一样的:

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

如你所知1被评估为true

你期望的是:

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

所以总是用括号来避免这样的混乱。

正如已经写好,三元表达式在PHP左结合。 这意味着,在第一,将执行从左边的第一个,则第二等等。



Answer 2:

单独的第二三元子句与括号中。

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


Answer 3:

有疑问时使用括号。

PHP中的三元运算符是左关联对比其他语言和没有按预期工作。



Answer 4:

从文档

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.
?>


文章来源: PHP multiple ternary operator not working as expected