6

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

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;
    };

但我真的不明白怎么做?

4

4 回答 4

6

这是PHP 5.3及更高版本的一个特性:

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

于 2013-08-02T19:06:48.827 回答
5

您对三元运算符的理解是正确的。

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

从 PHP 5.3 开始,可以省略三元运算符的中间部分。表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

完整的表达,没有遗漏,是:

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

这转化为您的假设:

if($data) {
    $this->data = $data;
} else {
    $this->data = Input::all();
}
于 2013-08-02T19:08:56.770 回答
2

?:自 PHP 5.3 起是三元运算符的缩写

所以,?:就像||javascript以下情况下:

var myVar = var1 || var2

如果var1被评估为真,myVar将是这个,否则var2

笔记:

0, '',falsenull被评估为假,所以如果你有以下情况:

$data = 0;
$this->data = $data ?: 'someVal';
echo $this->data;

你会得到"someVal"结果。

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

于 2013-08-02T19:09:35.223 回答
0

试试这个表格:

$this->data = $data ? $data : Input::all();
于 2013-08-02T19:05:28.147 回答