PHP 8 的 null safe 操作

PHP 7.0 引入了 null coalescing operator,大幅簡化以前需要用許多 isset() 做安全檢查的狀況。

// Before PHP 7
$action = isset($_POST['action']) ? $_POST['action'] : 'default';
$name = isset($name) ? $name : 'Anonymous';

// After PHP 7
$action = $_POST['action'] ?? 'default';
$name = $name ?? 'Anonymous';

但呼叫物件的 member / method 時還是要自己檢查回傳物件本身是否為 null。

$country =  null;

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

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

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

PHP 8 引入了 nullsafe operator,引用物件的 member / method 時就可以省去很多囉唆的 null 檢查。

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

Null coalescing operator 跟 nullsafe operator 各自有適用範圍,開發者可以同時用兩者來簡化各種 null 錯誤檢查。