PHP や Laravel で開発していると、「この値は空か?」「null か?」「入力があるか?」を判定する場面が頻繁に出てきます。PHP ネイティブの関数と Laravel のヘルパが混在しているため、何を使えばいいか迷いやすいところです。この記事では、よく使うものをまとめて整理します。
filled / blank(Laravel ヘルパ)
Laravel が提供する最も基本的な入力値チェックの関数ペアです。
filled($value) // 空じゃない
blank($value) // 空である
filled() は null・空文字列・空配列などをすべて「空」と見なして false を返します。blank() はその逆です。Laravel のフォーム入力や変数の有無チェックには、まずこちらを使うのがおすすめです。
is_null / isset(PHP ネイティブ)
PHP 組み込みの判定手段です。どちらも「null かどうか」に絞った判定をします。
is_null($value) // null なら true
isset($value) // null でないなら true(変数未定義も false)
filled() との違いは、空文字列の扱いです。
| 関数 | ''(空文字)のとき |
|---|---|
is_null |
false(null ではない) |
isset |
true(null ではない) |
filled |
false(空とみなす) |
空文字列を「値がある」と見なしたいかどうかで使い分けることになります。
empty(PHP ネイティブ・要注意)
empty() は「空っぽに見えるもの全部」を true にします。
empty($value)
false になる(= 空とみなされる)値:
''(空文字)null0'0'← ここが落とし穴[](空配列)
0 や '0' が空扱いになる挙動は、数値や ID を扱うときにバグの原因になりやすいです。Laravel では基本的に filled() / blank() を使い、empty() は避けるのが無難です。
配列・コレクションの空チェック
配列そのものの空チェックには count() も使えますが、Laravel の Collection を扱うときは専用のメソッドが自然です。
// 配列
count($array) > 0
// Collection
$collection->isEmpty()
$collection->isNotEmpty()
Collection を使っているなら isEmpty() / isNotEmpty() の方が読みやすく、メソッドチェーンとも相性が良いです。
リクエストの判定メソッド(重要)
コントローラーでリクエストを扱う際は、専用のメソッドが揃っています。それぞれ微妙に意味が違うので注意が必要です。
$request->has('name') // キーが存在するか(値が空文字でも true)
$request->filled('name') // 値が空でないか
$request->missing('name') // キーが存在しないか
フォームの送信値を使うかどうかの判定には filled() が適しています。has() はキーの存在確認なので、値が '' でも true になります。
条件分岐を書くとき、クロージャーを使った whenFilled() を使うと少しすっきりします。
$request->whenFilled('name', function ($value) {
// 値があるときだけ実行
});
optional / data_get(null 安全なアクセス)
値の有無ではなく、null でもエラーにせずアクセスしたい場面での定番パターンです。
optional($user)->name // $user が null でもエラーにならない
data_get($array, 'user.name') // ネストしたキーを安全に取得
data_get() はドット記法でネストを表現できるため、多次元配列や設定値の取得でよく使われます。同様のキー存在チェックには Arr::has() があります。
Arr::has($array, 'user.name')
実務での使い分け
これだけ関数が揃っていると迷いますが、場面ごとに絞り込むと判断しやすくなります。
| 場面 | 使うもの |
|---|---|
| フォーム入力の有無 | filled() / blank() |
| リクエスト処理 | $request->filled() |
| 配列・Collection の空チェック | isEmpty() / isNotEmpty() |
| null かどうかだけ判定したい | is_null() |
| null でもエラーにせずアクセス | optional() |
| ネストしたデータの取得 | data_get() |
empty() が上の表に入っていないのは意図的です。Laravel で書くなら、基本的に empty() の出番はほぼありません。「empty を使わず filled / blank を使う」が Laravel 的な考え方です。