考虑以下内容(简化为裸骨):
abstract class Validator {
public function __construct($data = null)
{
$this->data = $data ?: Input::all();
}
}
$validation = new PageValidator($data);
'Input :: all'返回一个数组。 $ data也是一个数组。
我正在努力的一点是:
$this->data = $data ?: Input::all();
我认为它基本上是这样做的:
if(!$data) {
$this->data = Input::all();
} else {
$this->data = $data;
};
但我真的不明白怎么做?
答案 0 :(得分:6)
这是feature of PHP 5.3及以上:
三元运算符现在有一个简写形式:
?:
。
答案 1 :(得分:5)
您对ternary operator的理解是正确的。
您显示的省略运算符中间部分的确切语法是PHP 5.3中添加的一项功能:
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
完整的表达,没有遗漏,是:
$this->data = $data ? $data : Input::all();
这可以转化为您的假设:
if($data) {
$this->data = $data;
} else {
$this->data = Input::all();
}
答案 2 :(得分:2)
?:
是自PHP 5.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
。
答案 3 :(得分:0)
尝试以下形式:
$this->data = $data ? $data : Input::all();