【问题标题】:Concatenate + Ternary串联+三元
【发布时间】:2015-02-02 16:43:17
【问题描述】:

在 PHP 中,有没有办法使用三元条件连接两个字符串?

<?= 'something' . (true) ? 'else' : 'not'; ?>

当我尝试这样做时,我得到的只是else,而不是所需的something else

【问题讨论】:

    标签: php


    【解决方案1】:

    只需像这样在整个三元运算符周围加上括号:

    <?= 'something' . ((true) ? ' else' : ' not'); ?>
    

    你为什么要这么做?

    答案是:运算符优先级

    查看手册了解更多信息:http://php.net/manual/en/language.operators.precedence.php

    【讨论】:

      【解决方案2】:

      是的,你需要把你的三元组放在括号里。试试这个:

      <?php echo 'something '.((true) ? 'else' : 'not'); ?>
      

      【讨论】:

        【解决方案3】:

        你的代码等于

        <?= ('something' . (true)) ? 'else' : 'not'; ?>
        

        因为根据table of Operator Precedence,运算符.的优先级高于三元运算符?:

        因此,您必须按照Rizier123 的说明用括号强制优先级

        【讨论】:

        • 谢谢,没意识到。似乎是技术上最精确的响应。也可以考虑添加正确的方法,以防其他人被绊倒并且看不到其他响应。
        • @cantera 只是说这不是因为三元运算符的左结合!这是因为连接运算符的优先级高于三元运算符!
        • @cantera 运算符的关联部分仅在运算符具有相同优先级时才相关,而她的情况并非如此!
        • -1 因为您所做的只是指出代码实际上在做什么。这很好,但实际上并不能解决问题。哪个不是。
        • @RubberDuck 我在其他三个告诉他如何解决的答案之后回答。但是没有人明确说明为什么代码打印“else”。我不希望成为公认的答案,因为它不是那么冗长。毫无疑问,cantera 知道三元运算符的工作原理。 HIwever 如果这对你真的很重要,我可以添加更多信息:-)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 2013-04-30
        • 2011-05-23
        • 1970-01-01
        • 2016-07-19
        • 2021-08-01
        相关资源
        最近更新 更多