【问题标题】:Can I use `??` (Null coalescing operator) instead of empty?我可以使用`??`(空合并运算符)而不是空的吗?
【发布时间】:2019-08-24 19:26:49
【问题描述】:

我有很多这样的代码

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

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

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

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

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

【问题讨论】:

    标签: php null-coalescing-operator


    【解决方案1】:

    正如你所说的

    $a ?? $b
    

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

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

    你可以使用

    $a ?: $b 
    

    这是

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 1970-01-01
      • 2019-04-10
      • 2012-11-07
      • 2017-04-08
      • 1970-01-01
      • 2012-09-19
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多