一般情况下,在类中要使用一个属性,最好是先申明这个属性。否则就是给自己的挖坑了。
先来看以下一段代码,
<?php
class test_class{
public function out(){
$this->test = 8;
return $this->test;
}
}
$obj = new test_class();
echo $obj->out();
?>
这段代码的输出是:8。
这就说明了一个未定义的属性,是可以在类中正常使用的。这是因为:
在类中使用$this-> 调用一个未定义的属性时,PHP5会自动创建一个属性供使用。
这个被创建的属性,默认的方法权限是public。
之所以说是挖坑,是当程序中加入了__set()魔术方法后,就不能使用这么使用了。
<?php
class test_class{
public function __set($property, $value) {
}
public function out(){
$this->test = 8;
return $this->test;
}
}
$obj = new test_class();
echo $obj->out();
?>
这个代码的输出:PHP Notice: Undefined property: test_class::$test,然而也没有输出。
在 $this->test = 8;这行代码时,程序发现存在魔术方法__set(),就去调用这个魔术方法而不会自动创建,但不巧的是你的__set()里面什么都没有干,这个属性就没有被创建。在后面使用的时候就当然会出错了。
所以属性最后先定义,或者在__set()上定义它。