【问题标题】:Simple PHP issue简单的PHP问题
【发布时间】:2011-10-30 03:32:33
【问题描述】:

我是速记条件语句的新手,我一生都无法弄清楚如何去做,这是我拥有的简单代码:

<?php

    function evolve_nav($vals) {

       echo '<'.$vals['type'] !== '' ? ''.$vals['type'].'' : 'darn''>';

    }

?>

有谁知道为什么这不返回任何内容并导致错误?

【问题讨论】:

  • -1,您根本没有真正说出您在问题中需要什么...只是发布了一些代码并说它不起作用。
  • @Cyclone - 我是否应该对其进行编辑以表明我希望它能够正常工作?
  • 不,但您可以尝试解释“希望它工作”的实际含义。
  • 恕我直言,如何不使用三元运算符的一个很好的例子 - 它使整个事情完全不可读 - 这就是你遇到问题的原因(评估顺序 - 用括号固定)。

标签: php ternary-operator conditional-statements


【解决方案1】:

你只是忘记了一些括号:

function evolve_nav($vals) {
    echo '<'.(!empty($vals['type']) ? $vals['type'] : 'darn').'>';
}
evolve_nav(array('type' => 'foobar'));
evolve_nav(array('not' => 'showing'));

【讨论】:

  • 我刚刚(再次)测试了上面的代码,我得到了输出&lt;foobar&gt;&lt;damn&gt;,这与预期的一样。由于您没有在 pastebin 中放入函数调用,因此我不确定您是否有任何错误。
【解决方案2】:
echo '<' . ($vals['type'] !== '' ? $vals['type'] : 'darn') .'>';

【讨论】:

    【解决方案3】:
    $descriptiveVariableName = $vals['type']!=='' ? $vals['type'] : 'darn';
    
    // View code
    echo "<$descriptiveVariableName>";
    

    【讨论】:

    • 为什么会遭到反对?这更具可读性,并解决了关于正确语法的 OP 问题。我再次支持 :-)
    • @Chris 你真好。 :) 是的,很多程序员都有自己的个人规则,如果他们认为有人违反了规则,他们就会投反对票。 :) 我很好奇为什么 Lance 会浏览每个人的帖子并将“该死”这个词改为“该死”。 =D
    【解决方案4】:
    • ''.$vals['type'].''是多余的,改成$vals['type']
    • 'darn''&gt;' 那是两个字符串文字,它们之间没有任何运算符(或任何东西)-> 语法错误。

    在这种情况下,我宁愿不使用字符串连接(即使用像 'xyz' . $a 这样的点运算符)而是“传递”多个参数来回显。

    echo
      '<',
      ''!==$vals['type'] ? $vals['type'] : 'darn',
      '>';
    

    或使用 printf

    printf('<%s>', ''!==$vals['type'] ? $vals['type'] : 'darn');
    

    【讨论】:

    • 你说它是多余的,它是,但然后继续在你的例子中使用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多