我可以使用`??`(空合并运算符)代替空吗?

时间:2019-08-24 19:26:49

标签: php null-coalescing-operator

我有很多这样的代码

$Var = !empty($Data->title) ? ' string1 ' . $Data->title : ' string2 ' . $Var2;

我在网上搜索后发现?? (Null coalescing operator)

因此,我想可以做类似的事情

$Var = ' string1 ' . $Data->title ?? ' string2 ' . $Var2;

我之所以这样问,是因为我知道??用于isset()NULL,但是我需要empty()作为我的项目代码。

1 个答案:

答案 0 :(得分:3)

您已经说过

$a ?? $b

(isset($a)) ? $a : $b;

的简称

但是,如果未定义变量或将其定义为null,则函数isset()将返回false。而!empty()如果未定义var或值为空或非零,则返回FALSE。因此,不能将??用于!empty()

您可以使用

$a ?: $b 

这是速记

((bool)$a) ? $a : $b;

Here are the rules如何将变量强制转换为布尔值。

简而言之,((bool)$a) == (!empty($a))始终为true,除非$a是从空标记创建的SimpleXML对象。

但是,在您的情况下,?!??都不起作用,因为' string1 ' . $Data->title总是非空且已定义。