<?php
class You {
public   $money = 1000;  //private不可以访问,public所有可以访问,protected只能被子类调用
public function loan($_money){
if($this->money<$_money){
echo "I can't borrow money to you!";
}
else{
$this->money=$this->money-$_money;
echo "I can borrow money to you!";
}

}
}
class Youself extends You  {
public function getmoney(){
return $this->money;
}
}$m= new You();
$m->loan(600);$p=new Youself();
//$p->loan(600);
echo "\nI only remain RMB ";
echo $p->getmoney();
?>为什么调试结果$p->getmoney值是1000?由于初学不太清楚类中对象值为什么不是400??

解决方案 »

  1.   


    因为你最后echo 是继承类中的money
      

  2.   

    这两个类中的this->money不是同一个值嘛?还是在构造类的时候,变量都初始化为同样值,只是父类中的值变化了,子类没有变化?
      

  3.   

    我就是搞不懂明明已经调用了$m->loan(600); ,使得money发生了改变,但是子类中的money是同父类同一个变量,为什么不改变?而且我也确认了$this->money=$this->money-$_money; 下面加上echo $this->money,显示其值确实发生了变化,已经变成400了啊。
      

  4.   

    可以稍微给个清楚的解释嘛,因为刚学这个,觉得有些不可思意,如果子类中的$this->money和父类中的$this->money,不是同一个变量值,那为何区分public/private/protected这几种变量呢?public修饰变量不就是为了让子类可以和父类指向同样一个变量的地址空间呢?
      

  5.   

    new 的是两个不同的对象,load()改变的只是You对象里面的money值,Youself 对象的money属性并没有改变。