1

有没有办法Nullsafe operator在php中使用条件?

4

2 回答 2

3

PHP 7

$country =  null;

if ($session !== null) {
  $user = $session->user;

  if ($user !== null) {
    $address = $user->getAddress();
 
    if ($address !== null) {
      $country = $address->country;
    }
  }
}

PHP 8

$country = $session?->user?->getAddress()?->country;

您现在可以使用带有新的 nullsafe 运算符的调用链来代替 null 检查条件。当链中一个元素的求值失败时,整个链的执行中止并且整个链的求值为空。

来源:https ://www.php.net/releases/8.0/en.php

于 2020-11-26T20:35:59.813 回答
0

Nullsafe 运算符允许您链接调用,避免检查链的每个部分是否不为空(空变量的方法或属性)。

PHP 8.0

$city = $user?->getAddress()?->city

PHP 8.0 之前

$city = null;
if($user !== null) {
    $address = $user->getAddress();
    if($address !== null) {
        $city = $address->city;
    }
}

使用null coalescing operator(它不适用于方法):

$city = null;
if($user !== null) {
    $city = $user->getAddress()->city ?? null;
}

Nullsafe operator抑制错误:

警告:尝试在致命错误中读取 null 上的属性“city”:

未捕获的错误:在 null 上调用成员函数 getAddress()

但是它不适用于数组键:

$user['admin']?->getAddress()?->city //Warning: Trying to access array offset on value of type null

$user = [];
$user['admin']?->getAddress()?->city //Warning: Undefined array key "admin"
于 2020-11-27T22:05:55.413 回答