【问题标题】:PHP Simplify a ternary operationPHP 简化一个三元运算
【发布时间】:2015-01-08 23:24:35
【问题描述】:

在 PHP 中,有没有办法在不使用 if() 的情况下进一步简化这一点?

$foo = $bar!==0 ? $foo : '';

我想知道如果条件满足,是否有办法不将$foo 重新分配给自己。我知道在 Javascript 中有一种方法可以做到这一点(使用 &&,对吗?),但想知道是否有一种方法可以在 PHP 中做到这一点。

【问题讨论】:

  • 你为什么想要更进一步?您是否希望每次遇到这样的事情时都要维护您的代码的可怜人搜索手册?我不会。
  • 投了赞成票,一月好点
  • @Jan 也对该评论表示赞同。 if ($bar == 0) $foo = ''; 和三元一样简单,不涉及自赋值,实际上更具可读性。
  • 不同意;三元运算符很容易阅读。 paxdiablo 给出的示例与上面的三元运算符不同;如果 $bar 不等于 0,则不会为 $foo 分配任何内容,并且它将是一个未定义的变量。要做到这一点,您需要在其中有一个 else 子句并分配其他内容 - 更长,可读性更差。
  • @El 再看问题,如果$bar 不是0,则$foo 被赋值为$foo 的值(即保持不变),所以该变量必须已经存在。

标签: php ternary-operator


【解决方案1】:

在 PHP 5.3 中,三元运算符的缩写形式终于出现了,因此您可以执行以下操作。

$foo = $bar ?: '';

参见the Comparison Operators 部分 - “从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?: 如果 expr1 计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。”

【讨论】:

  • 代码没有按照 op 的要求做,而且我看不到在这里利用短三元运算符的方法。
【解决方案2】:

是的,您也可以在 PHP 中使用逻辑和 (&&) 运算符。

$bar === 0 && $foo = '';

【讨论】:

  • 您有关于此方法的任何文档/教程吗?我见过它使用过,但从未完全理解它。
  • @Kerry 和if ($foo && $bar)中的一样。除了变量或值之外,您还可以将整个表达式放入其中,例如if ($foo == 0 && $bar = 'baz')。但它不必只在if () 表达式中使用。 && 是一个短路运算符,这意味着如果前半部分是 false,它将不会计算后半部分。所以$foo = '' 只会在$bar === 0 时被查看并执行。
猜你喜欢
  • 2023-01-07
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2019-12-15
  • 1970-01-01
  • 2011-12-15
相关资源
最近更新 更多