我可以使用“??”(空合并运算符)而不是空吗?

Nem*_*mic 2 php null-coalescing-operator

我有很多这样的代码

$Var = !empty($Data->title) ? ' string1 ' . $Data->title : ' string2 ' . $Var2;
Run Code Online (Sandbox Code Playgroud)

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

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

$Var = ' string1 ' . $Data->title ?? ' string2 ' . $Var2;
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*dam 5

正如你已经说过的

$a ?? $b
Run Code Online (Sandbox Code Playgroud)

是一个简写形式(isset($a)) ? $a : $b;

isset()但如果变量未定义或定义为 null,则该函数返回 false。而!empty() 如果 var 未定义或者具有空值或非零值,则返回 FALSE。所以你不能使用??for !empty()

你可以使用

$a ?: $b 
Run Code Online (Sandbox Code Playgroud)

这是一个简写

((bool)$a) ? $a : $b;
Run Code Online (Sandbox Code Playgroud)

以下是将变量转换为布尔值的规则。

简而言之,((bool)$a) == (!empty($a))总是 true,除非 if$a是从空标签创建的 SimpleXML 对象。

但是,就您而言,?!或 都??不起作用,因为' string1 ' . $Data->title始终非空且已定义。