概要
PHPは変数の宣言のみに関する構文はなく、値の定義によって変数が宣言される。
宣言・初期定義なしに変数を用いるとエラーとなるが、Javascriptのように自動的にドキュメントグローバルの変数になってしまって副作用が出かねないのとどちらがいいのか、悪いのか、不勉強のためすぐには結論が出せない。
未定義変数
未定義変数を直接評価するとUndefinedエラー
未定義の変数を評価しようとするとUndefinedエラーになる。
var_dump()
で無理やり評価するとNULLになるが、if文の評価には使えない。
1 2 3 4 5 6 |
var_dump($undef); // Notice: Undefined variable: undef in C:\PHP7.4.13\htdocs\workdesk\undefined.php on line 2 // NULL if ($undef) ; else '$undef -> false'; // Notice: Undefined variable: undef in C:\PHP7.4.13\htdocs\workdesk\undefined.php on line 4 |
未定義変数をisset()
で評価するとfalse
未定義の変数をisset()
で評価するとbool
型のfalse
。
1 2 |
var_dump(isset($undef)); // bool(false) |
if
文の条件式にisset()
の評価結果をそのまま使うと定義/未定義に対する処理が書ける。
1 2 3 4 5 6 7 |
if (isset($undef)) { print 'defined'; } else { print 'undefined'; } // undefined |
null
null
をisset()
で評価するとfalse
すなわち、isset()
で変数の有効性を評価する場合には、その変数が未定義である場合と、null
によって初期化した場合の区別なくfalse
の結果に相当する。
1 2 3 4 |
$null = null; if (isset($null)) ; else echo 'isset(null) -> false'; // isset(null) -> false |
定義済み変数
定義済み変数で内容がnullでなければtrue
したがってisset()
で変数を評価した時の結果はtrue/false
のいずれか。