PHP多个三元运算符没有按预期工作

问题描述 投票:14回答:4

为什么打印2

echo true ? 1 : true ? 2 : 3;

根据我的理解,它应该打印1

为什么它不按预期工作?

php ternary-operator
4个回答
25
投票

因为你所写的内容与:

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

如你所知,1被评估为true

你期望的是:

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

所以总是使用牙箍来避免这种混淆。

如前所述,三元表达式在PHP中是左对联的。这意味着首先将从左侧执行第一个,然后执行第二个,依此类推。


3
投票

用括号分开第二个三元句。

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

3
投票

如有疑问,请使用括号。

与其他语言相比,PHP中的三元运算符是左关联的,并且不能按预期工作。


2
投票

来自docs

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.
?>
© www.soinside.com 2019 - 2024. All rights reserved.