首页 > 解决方案 > 继承的函数不访问子类的私有变量

问题描述

我需要一些帮助。这段代码并不意味着做任何事情,我只是想了解这些继承函数是如何工作的。

所以父母和孩子都有 $wheels 变量并设置为私有(这没有意义,但我只是在玩代码)。

使用一种方法打印Instance的轮数。这个方法在子类中没有被覆盖。创建了父对象和子对象,并使用每个对象调用了 wheel_details()。

但是,当使用子对象调用时,该方法不使用子对象的私有 var。相反,它打印父对象的 var。

您认为它如何以及为什么访问父类的私有 var 而不是它自己的私有 var。

感谢对此的见解。TIA

class Bicycle {

    private $wheels = 2;


    public function wheel_details(){
        return " It has {$this->wheels} wheels. Invoked by ". get_class($this) ;
    }

}

class Unicycle extends Bicycle {

    private $wheels = 1;

}

$b1 =  new Bicycle;
$b2 =  new Unicycle;


echo "Bicycle1 wheels ". $b1->wheel_details(). " <br />";
echo "Bicycle2 wheels ". $b2->wheel_details(). " <br />";

/*Output
=======
Bicycle1 wheels It has 2 wheels. Invoked by Bicycle 
Bicycle2 wheels It has 2 wheels. Invoked by Unicycle
*/

标签: phpoopinheritance

解决方案


这是设计使然:

声明为私有的成员只能由定义该成员的类访问。

如果要覆盖子类的值,请protected改用。


推荐阅读