我可以使用 `??`(Null 合并运算符)而不是空值吗?

Can I use `??` (Null coalescing operator) instead of empty?

我有很多这样的代码

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

我在网上搜索了一下,找到了?? (Null coalescing operator)

因此,我认为可以做这样的事情

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

我问这个是因为我知道 ?? 用于 isset()NULL 但我的项目代码需要 empty()

正如你所说

$a ?? $b

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

的简写

但函数 isset() returns false if a variable was not defined, or if it was defined as null. Whereas !empty() returns 如果 var 未定义或具有空值或非零值,则为 FALSE。所以你不能用 ?? 代替 !empty()

你可以使用

$a ?: $b 

这是 shorthand

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

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

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

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