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

PHP中使用逻辑运算符的变量赋值,php,variable-assignment,logical-operators,short-circuiting,Php,Variable Assignment,Logical Operators,Short Circuiting,我一直在尝试在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-&

我一直在尝试在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();
}

如果你想在一行中完成它

$get = ($params = $this->input->get()) ? $params : array();
我不认为它在任何方面都会降低效率。
你也可以像这样做

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

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

由于PHP 5.3(希望您将其用作其他任何东西)是古老的,因此有一个没有中间部分的函数(因此,“二进制运算符”…):


如果没有找到任何内容,为什么不让
$this->input->get()
返回一个空查询?@BartFriederichs此方法是框架库的一部分,重写它实际上不是一个选项。这只是一个例子来解释我的问题。太棒了。我经常使用三元运算符,只是假设我知道所有关于它的知识,而不是重新阅读手册。谢谢你的教训。
$get = $this->input->get() ?: array();