[PHP] Notice: Undefined variable … について

これは、日本語にすると、「注意: 未定義の変数です」という意味になります。
この Notice は、定義されていない(=値が代入されていない)変数を参照した時に発生します。

Notice: Undefined variable: *** in ***/***.php on line ***

「Undefined variabe: ***」の部分が未定義の変数の名前、「in ***/***.php」の部分が未定義の変数が参照されているファイルの名前、「on line ***」の部分が未定義の変数が参照されている行番号を表しています。

この Notice が発生するのは、具体的には、以下のようなケースです。

<?php
if (条件) {
  $result = "OK";
}
echo $result;
?>

ここで、(条件)が FALSE の場合には、変数 $result には何も代入されませんが、その後のコードで $result の値を echo で表示しようとしています。 このような場合に「Undefined variable」の Notice が発生します。

他には、例えば「***.php?id=12」というように「id」という GET パラメータが指定されていることを期待して以下のようなプログラムを記述していたとします:

<?php
if ($_GET["id"] == 25) {
  ...
}
?>

この時、「***.php」という URL で「id」という GET パラメータが指定されずにページが呼び出された場合にも、この Notice は発生します。

Notice は、エラーではないので、PHP の処理は続行します。 ですので、状況を理解した上で上記のようなプログラムを記述している分にはやり過ごせてしまうものではありますが、できれば Notice も発生しないようにしておきたいですね。

対処方法としては、最初のケースの場合には、次のコードのように事前に何かしらの値を代入しておくという方法があります。

<?php
$result = ""; // 空の文字列を代入
if (条件) {
  $result = "OK";
}
echo $result;
?>

あるいは、次のコードのように条件が成立しなかった場合にも何かしらの値を代入する、という方法もあります。

<?php
if (条件) {
  $result = "OK";
} else {
  $result = ""; // 空の文字列を代入
}
echo $result;
?>

2番目のケースでは、次のコードのように isset() 関数を使って GET パラメータが存在することを確認してからパラメータの値をチェックする、という方法があります。

<?php
if (isset($_GET["id"]) and $_GET["id"] == 25) {
  ...
}
?>

if の条件チェックは括弧の中で左から順番に行われるので、isset($_GET["id"]) が FALSE だった場合には、$_GET["id"] == 25 のチェックは行われないため、このようにしておくことで Notice の発生を防ぐことができます。


Pocket
Bookmark this on Yahoo Bookmark

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>