$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が入るのかな。