PHPはユーザの投げてきた値、DBから取得した値といった、存在するかも怪しい値を扱うことが多いです。この問題への対策の定番は条件文とissetです。issetは変数がセットされていること、そして NULL でないことを検査する関数です。
PHP: isset – Manual
PHP: PHP 型の比較表 – Manual
条件文とissetを用いて真面目に素朴な書き方をするならば次の様になります。
if(isset($_GET['user'])){ $user = $_GET['user']; } else { $user = 'nobody'; }
5行になりました。この処理と同じ処理を何度も記述する場合、ソースコードは巻物の様に長くなります。条件文がシンプル、行う処理もシンプル、であるならば三項演算子がきれいに記述をしてくれます。三項演算子を用いた例は次になります。
$user = isset($_GET['user']) ? $_GET['user'] : 'nobody';
1行に収まりずいぶんましになりました。しかしながら、ある値が存在するならばその値を扱うという処理は定番であり、三項演算子を用いた場合、二重にある値――例ならば$_GET[‘user’]の繰り返し――が冗長です。Null合体演算子はこれを解決します。Null合体演算子による記述は次です。
$user = $_GET['user'] ?? 'nobody';
PHP: 比較演算子 – Manual
もうこれ以上ないくらいシンプルな記述になりました。最初のif文と同じ働きをしますが行数は1行、横の長さも大して変わりません。長大な参照名がついてしまっていても変数を増やさず二行で書けます。
$user_point_total = User::findOrFail($_POST['primary_key'])->userPointTotal->point_total ?? UserPointTotal::$default_points;