nullsafe演算とは
nullsafe演算子
(?->
)は、オブジェクトのプロパティやメソッドにアクセスする際に、
nullチェックを簡潔に行うための新しいPHP構文です
従来の方法では、nullチェックを行うために複数の条件文を書く必要がありましたが、
nullsafe
演算子を使用すると、コードがシンプルで読みやすくなります
基本構文
$property = $object?->property;
$result = $object?->method();
上記では、$object
がnull出ない場合にのみproperty
やmethod
にアクセスし、nullの場合はnullを返すようになっています
実際のコード例と解説
従来の方法との比較
従来の方法では、以下のようにnullチェックを行う必要がありました
if ($object !== null) { // またはisset()、!empty()など
$property = $object->property;
} else {
$property = null;
}
nullsafe演算子
を使うと、同じ処理を1行で記述できます
$property = $object?->property;
メソッドの場合は以下の通り
$result = $object?->method();
$object
がnullでない場合に、method()
を呼び出し、その結果を$result
に代入します
nullの場合は、$result
にnullが代入されます
nullsafe演算子の具体的なユースケース
データベースアクセス
オブジェクトがデータベースからのレスポンスを表している場合、nullsafe演算子を使って安全にアクセスできるようになります
$user = $db->getUser($userId);
$username = $user?->getUsername(); // $userがnullなら呼び出さないようになり、nullが代入されるようになります
APIレスポンス処理
APIレスポンスがnullを含む可能性がある場合、nullsafe演算子
を使ってエラーを避けることができます
$response = $api->getResponse();
$data = $response?->data?->item; // $responseまたはdataがnullであればitemへはアクセスされず、nullが代入されるようになります
深いネストのオブジェクト
深くネストされたオブジェクトにアクセスする場合、nullsafe演算子
を使用するとコードが簡潔になります
$value = $object?->level1?->level2?->level3;
まとめ
nullsafe演算子
は、PHP8で追加された便利な機能であり、コードの可読性と保守性を向上させることができます
従来のnull処理に比べてシンプルで使い勝手が良いのですがnullsafe
演算子だけでは解決できない実装もあるかと思いますので適材適所に使い分けましょう!
参考リンク