7

只是在玩,我发现了这个。

为什么引用调用$this->newAxis()不会抛出未定义的属性通知(属性xAxis),而var_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 回答