かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP 7 変数に値がなければデフォルト値を設定したい。

PHP で変数のデフォルト値を設定したい時

false の場合デフォルト値を使う

<?php
$var = $foo ?: $bar;

// 下記と同様
$var = $foo ? $foo : $bar;

?:三項演算子と同じ扱いで $foofalse 扱いになる場合は $bar が代入される

<?php
$var = null ?: 'default'; // => 'default'
$var = false ?: 'default'; // => 'default'
$var = 0 ?: 'default'; // => 'default'
$var = '' ?: 'default'; // => 'default'
$var = [] ?: 'default'; // => 'default'

Null の場合デフォルト値を使う ?? (Null合体演算子)

PHP 7 からは左辺が null の場合は右辺を代入する ?? Null合体演算子 が使用できる

<?php
$var = $foo ?? $bar;

// 下記と同様
if (isset($foo)) {
    $var = $foo;
} else {
    $var = $bar;
}

?: では デフォルト値になっていたものも null でなければ使用される

<?php
$var = null ?? 'default'; // => 'default'
$var = false ?? 'default'; // => false
$var = 0 ?? 'default'; // => 0
$var = '' ?? 'default'; // => ''
$var = [] ?? 'default'; // => []

// $_POST で値が渡ってこなかった時とかにも使える
$pram = $_POST['foo'] ?? 'default';

false になるときデフォルト値を使いたい時は ?:, 存在しない時にデフォルト値を使いたいときは ?? と言う感じ。
?: が暗黙の型変換だから、基本的に ?? を使うのが良さそう。 ( PHPempty() はトラップが多そう…)


[参考]

PHPフレームワーク Laravel入門 第2版

PHPフレームワーク Laravel入門 第2版