【问题标题】:PHP nested conditional operator bug?PHP嵌套条件运算符错误?
【发布时间】:2010-12-27 15:27:40
【问题描述】:
返回 真的 ? '一种' : 错误的 ? “乙”: 'c';

这应该返回'a',但它没有。它改为返回“b”。 PHP 处理条件运算符不同部分的顺序是否存在错误?

我从Are multiple conditional operators in this situation a good idea? 那里得到了这个想法,它似乎确实可以正常工作。

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

【问题讨论】:

  • 我推荐 phpa 来解决此类问题。它是一个类似于 python 的 php 解释器外壳。在这里找到它:david.acz.org/phpa
  • 虽然我喜欢三元运算符,但这是一个很好的例子,它可以完全混淆可读性。

标签: php conditional-operator


【解决方案1】:

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

来自“非显而易见的三元行为”下的PHP Manual。

三元运算符是从左到右计算的,所以除非你添加大括号,否则它不会像你期望的那样运行。不过,以下方法可行,

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      操作顺序:

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

      【讨论】:

        【解决方案4】:

        让我以向我解释的相同方式解释。但是您必须注意括号中的内容才能了解正在发生的事情。

        PHP

        下面的 PHP 代码

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

        相当于:

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

        其他语言

        下面的代码

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

        相当于:

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

        【讨论】:

          猜你喜欢
          • 2014-01-09
          • 2013-06-27
          • 2021-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-15
          • 2015-03-12
          • 2019-11-14
          相关资源
          最近更新 更多