繁体   English   中英

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

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

我有很多像这样的代码

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

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

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

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

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

正如你已经说过的那样

$a ?? $b

(isset($a)) ? $a : $b;的简写(isset($a)) ? $a : $b; (isset($a)) ? $a : $b;

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

你可以用

$a ?: $b 

这是一个简写

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

以下是变量如何转换为布尔值的规则

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

但是,在你的情况下,都没有?! 也不?? 会工作,因为' string1 ' . $Data->title ' string1 ' . $Data->title始终为非空并定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM