PHP 嵌套条件运算符错误?

发布于 2024-08-15 08:26:48 字数 479 浏览 6 评论 0原文

   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

这应该返回“a”,但事实并非如此。它返回“b”。 PHP 处理条件运算符不同部分的顺序是否存在错误?

我从 在这种情况下是否有多个条件运算符得到了这个想法一个好主意? 它似乎工作正常。

(当然,true 和 false 是为了示例的目的。在实际代码中,它们分别是评估为 true 和 false 的语句。是的,我肯定知道)

   
                return
                    true  ? 'a' :
                    false ? 'b' :
                                                           'c';

This should return 'a', but it doesn't. It returns 'b' instead. Is there a bug in PHP's order of handling the different parts of the conditional operators?

I got the idea from Are multiple conditional operators in this situation a good idea? where it does seem to work correctly.

(the true and false are for the purpose of the example, of course. in the real code they are statements that evaluate to true and false respectively. yes, i know that for sure)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

罗罗贝儿 2024-08-22 08:26:48

建议您避免
“堆叠”三元表达式。 PHP 的
使用多个时的行为
单个中的三元运算符
声明不明显

来自 PHP 手册 下的“Non -明显的三元行为”。

三元运算符是从左到右计算的,因此除非您添加大括号,否则它的行为不会如您所期望的那样。不过,以下内容可以工作,

return (true ? "a" : (false ? "b" : "c"));

It is recommended that you avoid
"stacking" ternary expressions. PHP's
behaviour when using more than one
ternary operator within a single
statement is non-obvious

From the PHP Manual under "Non-obvious Ternary Behaviour".

Ternary operators are evaluated left to right, so unless you add it the braces it doesn't behave as you expect. The following would work though,

return (true ? "a" : (false ? "b" : "c"));
强者自强 2024-08-22 08:26:48

怀疑它正在评估 (true ? 'a' : false) 作为第二个三元运算符的输入,并将 'a' 解释为 true。尝试适当地包围。

Suspect it's evaluating (true ? 'a' : false) as the input to the second ternary operator and interpreting 'a' as true. Try bracketing appropriately.

反差帅 2024-08-22 08:26:48

操作顺序:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'

order of operations:

>>> return true ? 'a' : false ? 'b': 'c';
'b'
>>> return true ? 'a' : (false ? 'b': 'c');
'a'
樱花坊 2024-08-22 08:26:48

让我用向我解释的方式来解释。但你必须注意括号中的内容才能理解发生了什么。

PHP

下面的 PHP 代码

true ? "a" : false ? "b" : "c"

相当于:

(true ? "a" : false) ? "b" : "c"

另一种语言

下面的代码

true ? "a" : false ? "b" : "c"

相当于:

true ? "a" : (false ? "b" : "c")

Let me explain in same way it was explained to me. But you have to pay attention in parenthesis to understand what is happening.

The PHP

The PHP code below

true ? "a" : false ? "b" : "c"

Is equivalent to:

(true ? "a" : false) ? "b" : "c"

Another languages

The code below

true ? "a" : false ? "b" : "c"

Is equivalent to:

true ? "a" : (false ? "b" : "c")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文