PHP中是否有“nullsafe运算符”?

2022-08-30 20:23:51

有没有办法使用某种安全的导航运算符编写以下语句?

echo $data->getMyObject() != null ? $data->getMyObject()->getName() : '';

所以它看起来像这样:

echo $data->getMyObject()?->getName();

答案 1

从 PHP 8 开始,您可以使用 null safe 运算符,它与 null 合并运算符相结合,允许您编写如下代码:

echo $data->getMyObject()?->getName() ?? '';

通过使用代替运算符链被终止,结果将为 null。?->->

“查看对象内部”的运算符被视为链的一部分。

  • 阵列访问 ([])
  • 物业使用权 (->)
  • 空值安全属性访问 (?->)
  • 静态属性访问 (::)
  • 方法调用 (->)
  • 空值安全方法调用 (?->)
  • 静态方法调用 (::)

例如,对于代码:

$string = $data?->getObject()->getName() . " after";

如果 $data 为 null,则该代码将等效于:

$string = null . " after";

由于字符串串联运算符不是“链”的一部分,因此不会短路。


答案 2

不,没有。

处理这个问题的绝对最佳方法是以一种始终返回特定类型的已知,良好,已定义值的方式设计对象。

对于绝对不可能做到这一点的情况,您必须执行以下操作:

$foo = $data->getMyObject();
if ($foo) {
    echo $foo->getName();
}

或者也许

echo ($foo = $data->getMyObject()) ? $foo->getName() : null;

推荐