donglie1898 2013-12-19 12:46
浏览 178
已采纳

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

I've been trying to replicate short circuit evaluation in javascript for assignment.

E.g. in Javascript

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

obj will now reference myObject

I tried to replicate this in PHP and found that it just turns it into an expression and returns true or false.

I could do this in PHP like this:

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

The problem with this is I don't know what $this->input->get() is doing behind the scenes so it's not efficient to call the method twice.

So I got creative and found a solution doing it as follows:

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

Problem with this is it may confuse me in the future and it may not be very efficient.

So is there a better way in PHP to assign a variable in a one line expression like this or should I just stick to:

$get = $this->input->get();
if (!$get) {
   $get = array();
}
  • 写回答

2条回答 默认 最新

  • donglu2008 2013-12-19 12:52
    关注

    Since PHP 5.3, which you are hopefully using as anything else is ancient, there's the ternary ?: operator without the middle part (so, the "binary operator"...?):

    $get = $this->input->get() ?: array();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决