はじめに
アドベントカレンダー12/12、12記事目になります。
今回は Laravel を学習している中で遭遇した、
「Undefined constant」エラー について、原因と解決方法をまとめてみました。
とても単純な書き間違いが原因でしたが、PHP を学ぶ上で重要な気づきだったので、
同じように Laravel × PHP を勉強している人の参考になれば嬉しいです。
環境
- 執筆者:Laravel初学者
- Laravelバージョン:7
- 使用パソコン:MacBook
エラー内容
実際に表示されたエラーはこちらです。
Fatal error: Uncaught Error:
Undefined constant "filter_validate_email" in /var/www/tr_php/02/create_user.php:41
Stack trace: #0 {main} thrown in /var/www/tr_php/02/create_user.php on line 41
エラー内容の意味
エラー内容の意味
filter_validate_emailという “定数” は存在しません。
PHPでは、
- 大文字で書く → 「定義済みの定数」
- 小文字で書く → 単なる「文字列 or 変数名扱い」
になります。
つまり…
filter_validate_email ← 存在しない定数として扱われエラー
FILTER_VALIDATE_EMAIL ← PHP が用意した正しい定数
という違いでエラーが発生していました。
どう解決したのか?
問題となったコードはこちらになります
✖変更前
if (!filter_var($mail_address, filter_validate_email)) {
$errors[] = 'メールアドレス形式で入力してください';
}
〇変更後
if (!filter_var($mail_address, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'メールアドレス形式で入力してください';
}
修正ポイントは「大文字・小文字」です。
PHPのフィルター機能である FILTER_VALIDATE_EMAIL は 大文字の定数 として定義されています
詳細な解説
filter_var() とは?
filter_var() は入力値を検証(バリデーション)したいときに使う関数です。
filter_var(検証したい値, フィルター定数)
フィルター定数の部分で、何をチェックするのかを指定します
FILTER_VALIDATE_EMAIL とは?
PHP にあらかじめ用意されている「定数」で、
メールアドレス形式として正しいかどうかを検証できます。
- 正しい形式 → メールアドレスを返す
- 間違っている → false を返す
PHP が標準で提供している定数なので、必ず 大文字で書く必要があります。
さいごに
今回のエラーは、とても単純な「大文字・小文字の書き間違い」が原因でした。
以前学んだスーパーグローバル変数($_SERVER と $_server の違いと同じ)にも共通していて、
「正しい表記かどうか」 を意識することの大切さを改めて実感しました。
Laravel 公式ドキュメントを最初からすべて理解するのは難しいですが、
エラーに遭遇するたびに調べて知識を積み重ねていくことが、結果的に大きな学びになると感じています。
今回の記事が、同じように Laravel や PHP を学習している方のヒントになれば幸いです。