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 錯誤檢查。