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

时间:2013-12-19 12:46:56

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

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

E.g。在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();
}

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

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

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

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

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