「Notice: Use of undefined constant」と表示されるとき
「Notice: Use of undefined constant」は直訳すると「未定義の定数を使った」ですが、ほとんどの場合、深く考える必要はありません。単純な入力ミスです。以下、原因と対策を紹介します。
入力ミスで「Use of undefined constant」になる理由
定数の話から離れますが、たとえば、「サンプルPC教室」という文字列を画面に表示するコードを考えてみましょう。
<?php echo "サンプルPC教室"; ?>
PHPの入門書の最初に出てくるような何のオチもないコードですが、続いて文字列を囲んでいる「"」(または「'」)を取り除いてみましょう。
<?php echo サンプルPC教室; ?>
これだけで次のような「Use of undefined constant」というエラーメッセージが表示されます。直訳すると「未定義の定数を使った」ですが、言うまでもなく原因は単純な入力ミスです。
サンプルPC教室
同じようなエラーで困っている方は、「未定義の定数」の意味を深追いせずに、入力したコードを見直してみてください。
「未定義の定数の使用」とは
ここからは技術的な話なので、問題が解決した方は読まなくても大丈夫です。興味のある方だけ、読んでみてください。
単純な入力ミスで「Use of undefined constant」(未定義の定数の使用)のようなエラーメッセージが表示される原因は、表示しようと思った文字列が定数(内容が固定の要素)だと判断されてしまうからです。
以下は定数を出力する例です。
<?php define('CONST1', 'テスト'); echo CONST1; ?>
定数を使うには、最初にdefine関数で定義してから、定数名を呼び出す流れになります。定数名を呼び出す場合、前後を「"」や「'」で囲む必要はありません。つまり、定数を表示するコードは、単純に文字列を表示するときの入力ミスと同じようなコードになる場合があります。
実際、上記のコードでdefine関数を省略してみましょう。わかりやすいようにコメントにしてみます。
<?php //define('CONST1', 'テスト'); echo CONST1; ?>
CONST1
期待通り、「Notice: Use of undefined constant CONST1」となります。この場合は定数の定義忘れですが、思い当たる原因がない場合は、最初に説明したように単純な入力ミスです。エラーメッセージを深追いしないように注意しましょう。