7

ふらふらしていて、これを見つけました。

への参照による呼び出しは未定義のプロパティ通知 (プロパティ) をスロー$this->newAxis()しないのに、なぜスローしますか?xAxisvar_dump()

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)
{
    // ...
}

参照渡しと関係があるので、プロパティに直接アクセスできませんか?

4

3 に答える 3

7

はい、それはあなたが参照によってそれを渡すために起こります。値を渡すと、変数の値を実際に読み取ろうとします。そのため、通知が表示されます。参照渡しの場合、値を読み取る必要はありません。

これを行うと、変数/プロパティがまだ存在しない場合に作成されます。

マニュアルから:

未定義の変数を参照によって割り当て、渡す、または返すと、変数が作成されます。

<?php
function foo(&$var) { }
foo($a); // $a is "created" and assigned to null
于 2012-12-21T01:58:44.953 に答える
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が定義されていないと文句を言います。

そしてそれがすべてです。十分に明確だったと思います。

于 2012-12-21T01:59:12.140 に答える
-2

私はここで四肢に行きます...

(クラスから)オブジェクトとしてアクセスしているため、通知は表示されませんが、var_dump 何かを配列のようにアクセスすると、通知がスローされます(空であるため、通知がスローされます)。

于 2012-12-21T01:53:07.510 に答える