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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值