`?:` 是什么意思?

3
在一个在线教程中,我看到了以下代码片段:
$this->data = $data ?: \Input::all();

这是一个标准的三元运算符吗?当 $data 评估为 true 时会发生什么?

以下代码是否与我发布的原始代码执行相同操作?

$this->data = $data ? null : \Input::all();

可能是参考 - PHP中这个符号的含义是什么?的重复,并且所有这些http://stackoverflow.com/search?q=%5Bphp%5D+body%3Aternary+is%3Aquestion - Mike B
@MikeB - 这不是一个重复的问题。toro2k编辑了我的问题,所以现在它变成了另一个问题的重复。 - Gravy
1个回答

8
这是一个三元运算符,是的缩写形式。
 $this->data = $data? $data : \Input::all();

自从PHP 5.3版本以后,三元运算符的中间部分可以省略。表达式expr1 ?: expr3的结果是,如果expr1为真,则返回expr1,否则返回expr3。 相关内容请见http://php.net/manual/en/language.operators.comparison.php

1
啊啊啊...谢谢。我以前没见过这样做,但是很有用。一旦可以,我会接受你的答案。 - Gravy
它不太常用,因为(1)相对较新,所以许多开发人员不知道它,(2)如果您想让您的代码与PHP 5.2兼容,则无法使用它,(3)不能用于常见示例,如isset($x) ? $x : '',因为您只会得到isset()返回的布尔值。 - Spudley
通常我在从数据库返回数据时使用它。在这种情况下,数组的键(通常)总是存在的,但可能是空字符串。 - Luca Rainone

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