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

时间:2013-08-02 19:02:00

标签: php

考虑以下内容(简化为裸骨):

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 个答案:

答案 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''falsenull评估为false,因此如果您有以下内容:

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

您将获得"someVal"作为结果。

对于这种情况,请使用issetempty

答案 3 :(得分:0)

尝试以下形式:

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