php类中使用未定义的属性说明

一般情况下,在类中要使用一个属性,最好是先申明这个属性。否则就是给自己的挖坑了。
先来看以下一段代码,

<?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()上定义它。

你可能感兴趣的