【问题标题】:Omitting the second part of the ternary operator省略三元运算符的第二部分
【发布时间】:2011-12-27 07:50:45
【问题描述】:

给定以下表达式:

$att['menutext'] = isset($attrib_in['i_menu_text']) ? : $this->getID();

如果计算结果为真,$att['menutext'] 是否会设置为 true$this->getID()

【问题讨论】:

  • 这不会执行,它的语法无效。 Parse error: syntax error, unexpected ':' on line X
  • PHP 5.3 中没有。 php.net/manual/en/…
  • 这解释了为什么它在 5.2.5 上不起作用:)

标签: php conditional-operator


【解决方案1】:

根据this reference

从 PHP 5.3 开始,可以省略中间部分 三元运算符。表达式 expr1 ?: expr3 返回 expr1 如果 expr1 为 TRUE,否则为 expr3

【讨论】:

    【解决方案2】:

    和下面的一样

    $att['menutext'] = isset($attrib_in['i_menu_text']) ? true : $this->getID();

    【讨论】:

    • 只是为了向路人澄清一下,三元运算符的这个快捷版本返回任何条件计算结果,而不仅仅是布尔值true 在每个实例中。在这种情况下,条件将评估为true。但如果你有$foo = 42 ? : false;$foo 将被分配42
    • 我对这个答案和评论实际上回答了我打算提出的问题以及我确实提出的问题这一事实印象深刻
    • 这个答案不正确,没有暗示isset
    【解决方案3】:

    是的,在 5.3+ 版本中,中间表达式是可选的并返回 true。

    $a = (true ? : 1); // $a evaluates to true.
    $a = (false ? : 1); // $a evaluates to 1.
    

    【讨论】:

    • 只是为了向路人澄清一下,三元运算符的这个快捷版本返回任何条件计算结果,而不仅仅是布尔值true 在每个实例中。在这种情况下,条件将评估为true。但如果你有$foo = 42 ? : false;$foo 将被分配42
    • 有没有办法使用第一个表达式作为第二个或第三个的结果?喜欢$db->get('id', 'users', 'id', $id) ? previous_query : anything_else。现在你必须写$db->get('id', 'users', 'id', $id) ? $db->get('id', 'users', 'id', $id) : anything_else。这向数据库发出了两个请求。你可以在此之前将它保存到 vars ,但这并不是我的意思。不可能?
    【解决方案4】:

    以前从未测试过,但它很容易测试:

    <?php var_dump(TRUE ? : 'F'); ?>
    

    它说:bool(true)

    【讨论】:

      【解决方案5】:

      这不会执行,它是 PHP 的无效语法。

      Parse error: syntax error, unexpected ':' on line X

      如果您希望将值设置为 true,则使用 true:

      $att['menutext'] = isset($attrib_in['i_menu_text']) ? true : $this->getID();
      

      或者您可能更愿意:

      $att['menutext'] = isset($attrib_in['i_menu_text']) ? $attrib_in['i_menu_text'] : $this->getID();
      

      【讨论】:

        猜你喜欢
        • 2020-08-28
        • 2020-04-14
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 1970-01-01
        • 2022-12-14
        相关资源
        最近更新 更多