PHP/Laravel で null の可能性がある値を optional や Null合体演算子 ?? を使って安全に取り扱う
はじめに
PHP, Laravel で null
の可能性があるケースでの便利なメソッドや演算子について調べたので忘れないようにメモ。
※Ruby の Safe Navigation Operator (ぼっち演算子) hoge&.name
とかのようなもの。
TL;DR
optional()
:optional($hoge)->name
とすると、$hoge = null
の時はnull
が返ってくる- エラーにならない
- Null 合体演算子
??
:$a = $b ?? 'null だよ'
とすると、$b != null
の時は$b
、$b == null
の時は??
の後の値が設定される- 三項演算子($a = $b != null ? $b : ‘null だよ’`)のようなもの
optional($a)->name ?? '未入力'
のように組み合せて使うと便利
目次
環境・条件
1 | $ cat /etc/os-release |
詳細
optional や Null 合体演算子 ??
を使う。
optional
Laravel 5.5 以降で利用可能。
php artisan tinker
で検証。
まずは $user = null
のときの動作。
1 | $ art t |
$user
に中身が設定されている時の動作。
1 | >>> $user = App\User::find(1) |
Null 合体演算子 ??
次は ??
演算子。正式名称は Null 合体演算子、PHP7 以降で利用可能。
普通に三項演算子を使うとこうなる。
1 | >>> $a = null |
??
演算子を使うとこう書ける。
1 | >>> $b = $a ?? 'string' |
組み合わせる
組み合せて使うと、null
のガードをしつつデフォルト値設定のようなことがシンプルに書ける。
1 | >>> $a = null |
まとめ
optional()
:optional($hoge)->name
とすると、$hoge = null
の時はnull
が返ってくる- エラーにならない
- Null 合体演算子
??
:$a = $b ?? 'null だよ'
とすると、$b != null
の時は$b
、$b == null
の時は??
の後の値が設定される- 三項演算子($a = $b != null ? $b : ‘null だよ’`)のようなもの
optional($a)->name ?? '未入力'
のように組み合せて使うと便利
その他・メモ
LaravelでもOptional Chainを使いたい、使おう。 - Qiita の内容を導入すると、より便利になりそう(だけど試してない)。
参考文献
optional()
- ヘルパ 6.0 Laravel- Null 合体演算子 - PHP: 新機能 - Manual
- 【Laravel/PHP】NULLや空文字列の判定まとめ - Laravel・PHP入門
- PHP7調査(11)??演算子の新設 - Qiita
- Laravel 5.5 で導入された Optional クラスについて - Qiita
- LaravelでもOptional Chainを使いたい、使おう。 - Qiita
- Ruby の &. と #try の違い - Secret Garden(Instrumental)
関連記事
- Laravel で現在の URL 取得方法まとめ
- Laravel で Cookie を使う(参照/設定/削除)
- Laravel で PDF ファイルをブラウザで開く
- Laravel で withCount と having を使って絞り込み
- Laravel で「開始日時 < 終了日時」であることをバリデーションする
- Laravel で生 SQL を実行
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア