【问题标题】:Variable assignment using logical operators in PHP在 PHP 中使用逻辑运算符进行变量赋值
【发布时间】:2014-01-08 01:10:24
【问题描述】:

我一直在尝试在 javascript 中复制短路评估以进行分配。

例如在Javascript中

var myObject = {foo: 'bar'};
// if myObject is undefined then assign an empty array
var obj = myObject || [];

obj 现在将引用 myObject

我尝试在 PHP 中复制它,发现它只是将其转换为表达式并返回 true 或 false。

我可以在 PHP 中这样做:

$get = $this->input->get() ? $this->input->get() : array();

这个问题是我不知道$this->input->get()在幕后做了什么,所以两次调用该方法效率不高。

所以我有创意并找到了一个解决方案,如下所示:

// $this->input->get() could return an array or false
$get = ($params = $this->input->get() and $params) ? $params : array();

这样的问题是它可能会在将来让我感到困惑并且它可能不是很有效。

那么在 PHP 中有没有更好的方法来像这样在单行表达式中分配一个变量,还是我应该坚持:

$get = $this->input->get();
if (!$get) {
   $get = array();
}

【问题讨论】:

  • 如果$this->input->get() 没有找到任何东西,为什么不返回一个空查询?
  • @BartFriederichs 这个方法是框架库的一部分,覆盖它并不是一个真正的选择。无论如何,这只是一个解释我的问题的例子。

标签: php variable-assignment logical-operators short-circuiting


【解决方案1】:

由于 PHP 5.3(您希望将其用作其他任何东西)是古老的,所以 ternary ?: operator 没有中间部分(所以,“二元运算符”...?):

$get = $this->input->get() ?: array();

【讨论】:

  • 太棒了。我经常使用三元运算符,只是假设我知道所有关于它的知识,而不是重新阅读手册。谢谢你的课。
【解决方案2】:

如果你想在一行中完成......

$get = ($params = $this->input->get()) ? $params : array();

我认为它在任何方面都不会降低效率。
你也可以这样做......

$get = $this->input->get() ?: array();

但是,使用这种方式,我不确定$this->input->get() 是被调用一次还是两次。

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 2018-12-18
    • 2015-02-08
    • 2015-04-09
    • 2022-08-17
    • 2018-09-28
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多