PHP三元运算符检查变量是否包含某些内容?

PHP三元运算符检查变量是否包含某些内容?,php,Php,考虑以下内容(简化为基本内容): “Input::all”正在返回一个数组$数据也是一个数组 我正在努力解决的问题是: $this->data = $data ?: Input::all(); 我认为它基本上是这样做的: if(!$data) { $this->data = Input::all(); } else { $this->data = $data; }; 但我真的不明白怎么做?试试这个表格: $this-&

考虑以下内容(简化为基本内容):

“Input::all”正在返回一个数组$数据也是一个数组

我正在努力解决的问题是:

$this->data = $data ?: Input::all();
我认为它基本上是这样做的:

    if(!$data) {
        $this->data = Input::all();
    } else {
        $this->data = $data;
    };
但我真的不明白怎么做?

试试这个表格:

$this->data = $data ? $data : Input::all();
这是a及以上级别:

三元运算符现在有一个简写形式:
?:

你对这个问题的理解是正确的

您所展示的省略运算符中间部分的确切语法是PHP 5.3中添加的一项功能:

由于PHP5.3,可以省略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为真,则expr3返回expr1,否则返回expr3

完整表述(无遗漏)为:

$this->data = $data ? $data : Input::all();
这就转化为你的假设:

if($data) {
    $this->data = $data;
} else {
    $this->data = Input::all();
}

?:
是PHP5.3以来三元运算符的缩写

因此,
?:
类似于
|
在以下情况下用于
javascript

var myVar=var1 | | var2

如果
var1
的计算结果为true,
myVar
将为该值,否则
var2

注意事项:

0
false
null
的计算结果为false,因此如果您有以下情况:

$data = 0;
$this->data = $data ?: 'someVal';
echo $this->data;
您将得到
“someVal”


对于这种情况,请使用
isset
empty

是的,如果您使用的是PHP5.3或更高版本,它就是这样做的。如果您使用的是PHP<5.3,那么您必须编写它
$this->data=$data$数据:Input::all()。这并不能真正回答任何问题。这并不能真正回答OP的问题,也不能帮助“理解”为什么会这样。Genius;)如果$data=null,调用if($data)是否返回false?不需要使用isset()/empty()?它将返回false,但如果以前未使用$data,它还将发出未定义的变量警告。这就是使用isset()的原因-它绕过警告并充当“此变量实际存在吗”测试。@dopey如@Mark B所说,如果
$data
为空,则返回false,但带有警告。有关详细信息,请参阅。@dopey在本例中永远不会发出警告,因为它是在方法声明中定义的。如果它不是由调用构造函数的任何人提供的,它将被设置为
null
,这与未定义不同,但两者都将返回false,并使用
isset
$data = 0;
$this->data = $data ?: 'someVal';
echo $this->data;