当前位置: 首页 > 面试题库 >

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

欧阳俊明
2023-03-14
问题内容

为什么要打印2

echo true ? 1 : true ? 2 : 3;

以我的理解,它应该打印1

为什么它没有按预期工作?


问题答案:

因为您编写的内容与以下内容相同:

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

如您所知1被评估为true

您期望的是:

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

因此,请始终使用大括号以避免此类混淆。

正如已经写过的,三元表达式在PHP中是关联的。这意味着首先将执行从 左边开始 的第一个,然后是第二个,依此类推。



 类似资料:
  • 所以这可能是一个愚蠢的问题,但我时不时地遇到这种语法错误,似乎无法吸取教训-因为我根本不明白为什么这不起作用。 由于某种原因,三元运算符不能处理增量或减量。 在控制台中,我发现了这些结果: 在搜索答案时,我发现另一个用户对意外行为有同样的体验。 经过更多的搜索,我发现前增量工作正常: 在试图确定预增量的工作原理时,遇到了这个答案。 这让我明白了为什么它能工作,而后增量不能。我想,如果三进制的操作顺

  • 问题内容: 这是我写的: 但是对于每个领域我都有价值。我想使用三元运算符,而不是因为我想尝试一下,看看它会如何完成。 此代码有什么问题? 问题答案: 其他人已经提出了正确的方法,但是如果您真的想使用三元运算符,则需要使用括号:

  • 这是我写的: 但是对于每个字段,我都得到值。我想使用三元运算符,而不是,因为我想试验一下,看看它是如何实现的。 这个代码有什么问题?

  • 问题内容: 我大量使用三元运算符,但似乎无法在内部相互堆叠多个三元运算符。 我知道堆叠多个三元运算符 会使代码的可读性降低, 但在某些情况下,我想这样做。 到目前为止,这是我尝试过的: 正确的语法是什么? 问题答案: 这些括号是我认为能带给您的。 尝试

  • 您好,我正在尝试在Perl 6中使用赋值超运算符https://docs.perl6.org/language/operators#Hyper_operators 如何使赋值超运算符正确运行?谢谢

  • 问题内容: 有人可以解释PHP中的三元运算符速记()和空合并运算符()之间的区别吗? 它们什么时候表现不同,什么时候以相同的方式表现(如果甚至发生)? VS。 问题答案: 当您的第一个参数为null时,它们基本相同,不同之处在于,当您有未定义的变量时,null合并不会输出。在PHP7.0迁移的文档有这样一段话: 对于需要将三元数与isset()结合使用的常见情况,已将空合并运算符(??)添加为语法