PHP7中增加了双问号“??”的语法,我们来讨论一下这个新语法怎么使用,先看下面这个简单的语句:echo $a ?? -1;
这行语句是一个判断语句,判断变量$a是否存在,存在的话输出变量$a,否则输出-1。很显然由于变量$a没有被定义,所以输出的结果是“-1”。
我们再来看下面这行简单的语句:echo $a ? 1 : -1;
上面这行代码是判断变量$a是否为空,如果为空的话输出“-1”,否则输出“1”。这行代码的输出结果也是“-1”,那么上面这两者有什么区别呢?
“??”语句判断的是变量$a是否存在,“?:”语句判断的是变量$a是否为空,当然如果变量不存在的话,也是为空的。所以“?:”的结果包含了“??”的结果。
我们再来看以下两个例子:
例子一:$a = 0;
echo $a ?? -1;
例子二:$a = 0;
echo $a ? 1 : -1;
我们运行上面两个示例后可以发现,例子一的输出是“0”,因为变量$a已经被赋值了,是一个已经存在的变量,所以输出了变量$a本身的值“0”。例子二输出的是“-1”,因为值为“0”的变量依旧会被认为是空的,所以输出了“-1”。
通过以上示例,我们发现双问号“??”判断的是是否存在,“?:”判断的是是否为空。