【问题标题】:PHP Null coalescing operator usagePHP Null 合并运算符用法
【发布时间】:2023-03-23 18:17:01
【问题描述】:

在 PHP 中使用三元运算符的示例代码,我得到了“默认值”。

$myObject = null; // I'm doing this for the example
$result = $myObject ? $myObject->path() : 'default value';

但是,当我尝试使用 null 合并运算符来执行此操作时,我得到了错误

在 null 上调用成员函数 path()

$result = $myObject->path() ?? 'default value';

我做错了什么?运营商?

【问题讨论】:

标签: php laravel null-coalescing-operator


【解决方案1】:

如果左侧为空或未设置,?? 将起作用,但是在您的情况下,如果 $myObject 为空,则无法评估左侧。

您应该考虑的是 PHP 8 提供的新 nullsafe operator(因此需要等待)

$result = $myObject?->path() ?? 'default value';

如果$myObject 为空,这应该使左侧为空

在那之前你可以这样做:

$result = ($myObject ? $myObject->path() : null) ?? 'default value'; 

这与您的第一个用例不同,如果$myObject $myObject->path() 为空,您将获得default value

【讨论】:

  • 太酷了。是的,这就是我要找的运营商!这就是我将在 Swift 中使用的。谢谢
【解决方案2】:

这些 sn-ps 的工作方式不同:

$result = $myObject ? $myObject->path() : 'default value'; 说:如果$myObjectNULL,则使用'default value'

$result = $myObject->path() ?? 'default value'; 说:如果 $myObject->path() 返回 NULL,则使用默认值 - 但该调用只能在对象本身不是 NULL 时返回一些内容

【讨论】:

  • 哦,好酷。所以我应该能够链接?操作员。但是如果我这样做,有什么意义,我还不如使用三级运算符...
  • 这取决于您想要实现的目标:) 据我所知,您使用的第一个代码可以完成它应该做的事情,并且没有更短的方法
  • 是的,我是这么想的……我编辑了我的评论。正如你所说,没有更短的方法,那么重点是什么
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 2019-04-30
  • 2023-03-18
相关资源
最近更新 更多