类的成员变量和 属性

本文章有误,请不要阅读。

1.

对于public 定义的类的变量称为成员变量,譬如:

public $age;


2.

通过 get开头的方法定义的为属性,譬如:

public function getAge() {}
public function setAge($age) {}


他们都可以通过$ob->age 访问


3 优先级

如果在一个类中,定义了

class ob{
     public  $age =10;
     public function getAge(){
          return 18;
     }

     public function __get($name) 
     {
           return 22 ;
      }

}


如果

$ob = new ob();
$ob->age  


1.返回的是public 定义的成员变量, 10

2.如果去掉public $age的定义,那么返回的是魔术方法   22

因为魔术方法对应的是,当某些成员变量不存在的时候,就会访问魔术方法__get

3.如果去掉 __get的方法的定义,才会访问对象的属性,那么返回的是 18


4.上面说的是他们的优先级,下面说的是一些看着有点离谱的事情。

看似是一个赋值的行为,你感觉是给对象的成员变量变量赋值,其实执行的是一个方法,

严格的说类的属性不是一个变量,而是一个方法

但是在代码中的定义,你看不出来赋值的时候是成员变量还是类的属性,因此,在赋值的时候就发生了一些你看不到的事情,呵呵,譬如:

class ob{
public $bbb = 1;
public function  setAaaaa(){
$this->bbb = 9; 
}
public function  getAaaaa(){
return 199;
}
}


如果上面的代码是封装的,我看是在其他的类中对ob操作

$ob = new $ob()
echo $ob->aaaaa;
echo $ob->bbb;
$ob->aaaaa = 10;
echo $ob->aaaaa;
echo $ob->bbb;


 结果:

199
1
199
9

也就是说我们在给属性aaaaa 赋值,但是函数里面执行的是成员变量bbb的改变,所以这样的代码,就会带来困惑。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值