PHP8 Null安全チェーン
Null安全演算子とは
PHP8 で導入された Null安全演算子 ?-> は、オブジェクトが null である場合に安全にプロパティアクセスやメソッド呼び出しを行うための記法です。従来は if ($obj !== null) で判定し、$obj->method() を呼び出す必要がありましたが、?-> を使うと一行で済みます。
チェーン呼び出しの実装
Null安全演算子はチェーン呼び出しと組み合わせることで、複雑なオブジェクト構造を簡潔に扱えます。以下は典型的な例です。
<?php
$city = $user?->address?->city?->name;
?>
上記では、$user が null であっても、途中で null が返るとそれ以降の呼び出しはスキップされ、$city は null になります。
ヌルチェックとエラー回避
従来の if ($obj !== null) でのヌルチェックは冗長で、コードが長くなりがちです。?-> を使うと、NullReferenceException のようなエラーを回避しつつ、可読性を保てます。さらに、?? 演算子と組み合わせることでデフォルト値を設定できます。
<?php
$cityName = $user?->address?->city?->name ?? '不明';
?>
コード短縮とモダン記法
PHP8 の Null安全演算子は、プロパティアクセスやメソッド呼び出しを短縮するモダン記法です。従来の if ($obj !== null) { $obj->method(); } を $obj?->method(); に置き換えるだけで、コード量が大幅に削減されます。また、関数チェーンの途中で null が返ると自動的に null が返るため、追加のエラーハンドリングが不要になります。
実践例
以下は、実際に Null安全演算子を使ったサンプルです。ユーザー情報からメールアドレスを取得し、存在しない場合はデフォルトを設定します。
<?php
class User {
public ?Address $address = null;
}
class Address {
public ?City $city = null;
}
class City {
public string $name;
}
$user = new User();
$cityName = $user?->address?->city?->name ?? '東京';
echo $cityName; // 出力: 東京
?>
このように、Null安全演算子とチェーン呼び出しを組み合わせることで、ヌルチェックを最小限に抑えつつ、エラー回避とコード短縮を実現できます。
コメント
コメントを投稿