只是玩,我找到了。
为什么通过引用$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)
{
// ...
}
是否与传递引用有关,因此不能直接访问属性?
答案 0 :(得分:7)
是的,它发生是因为您通过引用传递它。当您通过值传递时,会尝试实际读取变量的值 - 因此会出现通知。当您通过引用传递时,不需要读取该值。
执行此操作时,如果变量/属性尚不存在,则会创建它。
来自manual:
如果通过引用分配,传递或返回未定义的变量,它 将被创造。
<?php function foo(&$var) { } foo($a); // $a is "created" and assigned to null
答案 1 :(得分: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
未定义。
就是这样。我希望它足够清楚。
答案 2 :(得分:-2)
我在这里... ...
由于你是作为一个对象(来自一个类)访问它,它不会给你一个通知,而当你var_dump它有点像一个数组访问它(因为它是空的它会抛出一个通知)