MW211 EXIT

devlog
PHP/宣言していない変数の扱い
2011年09月21日
PHPの変数は宣言不要で、値を格納した時点で宣言して初期化されたような状態になる。
逆にいえば、値を格納していない変数は宣言されていないものとみなされる。

┌──────────────────────────────────────┐
│$変数 = '値';                                                               │
│echo $変数                                                                  │
└──────────────────────────────────────┘
上記はOKでも、下記はNGである(でもエラーではない)。
┌──────────────────────────────────────┐
│echo $変数                                                                  │
└──────────────────────────────────────┘

この場合、「Notice: Undefined variable: 変数 in 行番号」のような警告が出る。

「@」を使えば、警告は抑止されるので以下のようにすれば、事実上支障はなくなる。
┌──────────────────────────────────────┐
│echo @$変数                                                                 │
└──────────────────────────────────────┘

では以下のように代入した場合はどうなるのか?
┌──────────────────────────────────────┐
│$代入先 = @$変数;                                                           │
└──────────────────────────────────────┘

この場合は「NULL」が格納されているものとみなされ、代入先にも「NULL」が入る。

つまり以下のような処理の場合、条件に該当しなければ、
代入先に「NULL」が入ってくれるということになる。
┌──────────────────────────────────────┐
│if (条件) {                                                                 │
│  $変数 = '値';                                                             │
│}                                                                           │
│$代入先 = @$変数;                                                           │
└──────────────────────────────────────┘

なお、「is_null()」と「isset()」が正反対の関係、
つまり「is_null() = !isset()」の関係にあるのは
これを元に考えれば辻褄が合う。

つまり、setされていない変数はNULL扱いなのだ。
分類:PHP