2012-12-21 8 views
7

ちょうど遊んで、私はこれを見つけました。なぜこのコードは未定義のプロパティPHPの通知を投げていないのですか?

$this->newAxis()を参照することにより、通話がvar_dump()がする一方でないは、未定義のプロパティ通知(xAxisプロパティを)投げるのはなぜ?

public function newXAxis() 
{ 
    // var_dump(isset($this->xAxis)); // false 
    // var_dump($this->xAxis); // Throws the notice 
    return $this->newAxis($this->xAxis); // Should throw the notice?! 
} 

protected function newAxis(&$current) 
{ 
    // ... 
} 

それは、このように直接プロパティにアクセスしていない、参照渡しとは何かを持っていますか?あなたは(クラスから)、それをオブジェクトとしてアクセスしているので、私はここに手足に行くよ

答えて

7

はい、これは参照渡しのために起こります。値渡しすると、実際に変数の値を読み込もうとします。そのため、通知が表示されます。参照渡し時には、値を読み込む必要はありません。

これを実行すると、まだ存在しない変数/プロパティが作成されます。 manualから

あなたは、割り当てるパス、または参照によって未定義の変数を返す場合、それ が作成されます。

<?php 
function foo(&$var) { } 
foo($a); // $a is "created" and assigned to null 
+0

私はいつも新しいことを学ぶので、プログラミングが大好きです。マニュアルを参照してくれてありがとう。 – gremo

-2

...

あなたが何かのアクセスのそれは種類をのvar_dumpときながら、それは、あなたに注意を与えることはありませんそれは配列のようなものです(それは空であるため通知を投げます)

5
newAxis(&$current) 

参照渡しです。つまり、変数を渡しています。

デフォルトでは、PHPのすべての変数は未定義です。

$a = 1; 

あなたが見ることができるように、PHPは右、$aが未定義であることを、ここで文句ないのですか?

オーケー;)、ここを参照してください:

$a = $b; 

PHPは今$bが定義されていないと文句を言い。

$a(変数を定義する)と$b(変数が定義されていない)と同じように、それは、参照することにより、または値渡しである:参照によって渡されたときに

$this->newAxis($a); 

変数$aが定義されています。デフォルト値はNULLです。そして今$b例:

var_dump($b); 

var_dumpは、それが値でパラメータだかかります。したがって、PHPは$bが定義されていないと訴えています。

それだけです。私はそれが十分にはっきりしたことを望む。

関連する問題