PHP中使用逻辑运算符进行变量赋值

5

我一直在尝试为赋值操作在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()在找不到任何内容时返回一个空查询呢? - Bart Friederichs
1
@BartFriederichs 这个方法是框架库的一部分,覆盖它并不是一个真正的选择。无论如何,这只是一个例子,用来解释我的问题。 - Seain Malkin
2个回答

9

自从PHP 5.3版本推出以来,希望您使用此版本,因为其他版本已经过时了,它引入了不带中间部分的三元运算符(也就是“二元运算符”):?:

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

好极了。我经常使用三元运算符,但并没有重新阅读手册,认为自己已经全知道了它的一切。谢谢你的教训。 - Seain Malkin

0
如果你想要在一行代码中完成这个任务...
$get = ($params = $this->input->get()) ? $params : array();

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接