$obj->varと$varの初期化の違い。PHP Noticeの出る出ない
僕はよくPHPのスコープを忘れてしまい右往左往するのですが、
今回は宣言したのにPHP Notice出てアレレとなってしまったのでメモ。
まず、いつも変数を使う時に
$obj = null;
みたいな感じで初期化してから使ってました。
で、「Perlの時みたく変数だけ書いた方が見栄えいいんだけどなぁ」と思い、
たまたま作ってたクラスで
<?php class Klass { public $var; } $obj = new Klass(); var_dump(is_null($obj->var));
みたいにしたところ、
bool(true)
となったので、「あぁ、なんだnullを入れる必要なんてなかったんだ」と安心してました。
と、思ったのに、いざメソッドの中で以下のように変数を宣言してみたところ、
<?php $obj; var_dump(is_null($obj));
は、
PHP Notice: Undefined variable: obj in - on line 3 bool(true)
とPHP Noticeが出ちゃうんですね。
初めに書いたように
<?php $obj = null; var_dump(is_null($obj));
と、nullで初期化してあげると
bool(true)
となりNoticeが出ません。
「何だコレ。よくわからない」と思っていたんですけど、
$objだけだとunset($obj)された状態と同じなんですかね。
classの方はプロパティとして作られるから自動的にnullが入るのかな。