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

dop*_*pey 6 php

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

abstract class Validator {    

    public function __construct($data = null)
    {
        $this->data = $data ?: Input::all();
    }
}


$validation = new PageValidator($data);
Run Code Online (Sandbox Code Playgroud)

'input :: all'返回一个数组.$ data也是一个数组.

我正在努力的一点是:

$this->data = $data ?: Input::all();
Run Code Online (Sandbox Code Playgroud)

我认为它基本上是这样做的:

    if(!$data) {
        $this->data = Input::all();
    } else {
        $this->data = $data;
    };
Run Code Online (Sandbox Code Playgroud)

但我真的不明白怎么样?

fed*_*o-t 6

是PHP 5.3及以上版本的一个特性:

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


new*_*rey 5

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

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

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

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

$this->data = $data ? $data : Input::all();
Run Code Online (Sandbox Code Playgroud)

这转化为您所假设的:

if($data) {
    $this->data = $data;
} else {
    $this->data = Input::all();
}
Run Code Online (Sandbox Code Playgroud)


Jer*_*zki 0

尝试这个形式:

$this->data = $data ? $data : Input::all();
Run Code Online (Sandbox Code Playgroud)

  • 这并不能真正回答任何问题 (2认同)
  • 这并不能真正回答OP的问题,也不能帮助“理解”为什么会出现这种情况。 (2认同)