我可以使用 `??`(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
始终是非空的且已定义。
我有很多这样的代码
$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
始终是非空的且已定义。