【问题标题】:PHP: Use the short if-statement without else?PHP:使用简短的 if 语句而不使用 else?
【发布时间】:2018-07-24 11:13:15
【问题描述】:

如果简短的 if 版本,我是粉丝,例如:

($thisVar == $thatVar ? doThis() : doThat());

我想删掉 else 语句,例如:

($thisVar == $thatVar ? doThis());

但是,它不起作用。有什么办法让我错过了吗?

【问题讨论】:

  • 不,没有办法做到这一点,因为它不是一个简短的if,更像是一个简短的if/else(尽管这只是一种非常简单的看待方式它)
  • [1,null][$thisVar==$thatVar] ?? doThis();
  • @chi 那应该怎么做??为什么包含单个布尔值 null 的数组会合并?在我看来很荒谬。

标签: php if-statement ternary-operator


【解决方案1】:

三元运算符旨在产生两个值之一。它是一个表达式,而不是一个语句,您不应该将它用作 if/else 的更短的替代方案。

没有办法省略: 部分:如果这样做,表达式的计算结果是什么?

如果您调用有副作用的方法,请使用 if/else。不要走捷径。可读性比保存几个字符更重要。

【讨论】:

  • 我不完全同意。想象一下:<li class="<?php echo $is_active ? 'active' : '' ?>"> vs javascript 风格:<li class="<?= $is_active && 'active' ?>"> vs react js:<li className={is_active && 'active'}> 如果你构建了很多 php 站点并且你使用了很多这样的有条件的东西,那么总是做: ' ' 部分会很痛苦。现在对于“可读性”想象:<li class="<?php if($is_active): echo "active"; endif; ?>"> JS 风格的 php 是最可读的。
  • @ErikKubica 这些表达方式没有副作用。
【解决方案2】:

没有else,您将无法使用它。但是你可以试试这个:

($thisVar != $thatVar ?: doThis());

if ($thisVar == $thatVar) doThis();

【讨论】:

    【解决方案3】:

    为我工作:

    $leftHand != $rightHand?doThis():null;
    $leftHand == $rightHand?null:doThis();
    

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习。据我所知,您的代码仍然使用else 部分,那么这如何解决给定的问题?
    【解决方案4】:

    hmm 很有趣,因为执行下面的代码是有效的。观察:

    for ($i = 1; $i <=10; $i++) {
        if ($i % 2) {
          echo $i;
        }
      }
    

    上面的代码确实会输出 13579

    注意上面没有使用“else”子句。

    如果您想告知用户是否 $i % 2 == FALSE($i 的除数产生余数 0),您可以包含一个 else 子句来打印出偶数,如下所示:

    for ($i = 1; $i <=10; $i++) {
        if ($i % 2) {
          echo "$i is odd";
          echo "<br />";
        } else {
          echo "$i is even";
          echo "<br />";
        }
      }
    

    给你输出: 1是奇数 2 是偶数 3是奇数 4是偶数 5是奇数 6 是偶数 7是奇数 8 是偶数 9是奇数 10 是偶数

    我希望我非常容易理解的示例能够帮助所有 PHP 新手,让他们成为构建动态 Web 应用程序的“最佳”服务器端脚本语言 :-)

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多