为什么$pri用的是父类的属性?

为什么可以调用到父类的私有属性$pri?

<?php
class father {
  public $pub='public';
  private $pri='private';
  protected $pro='protected';
  public function getpri(){
    echo $this->pri;
    echo $this->pro;
    echo $this->pub;
  }
}
class son extends father{
  public $pub='王二';
  private $pri='黄金时代';
  protected $pro='沉默的大多数';
  public function getpub(){
    echo $this->pub.'';
    echo $this->pro;
    echo $this->pri;
  }
}
$son=new son;
$son->getpri();
?>
阅读 2.1k
2 个回答

因为只会继承父类所有公有的和受保护的方法和属性。除非子类覆盖了父类的方法,被继承的方法都会保留其原有功能


我们来打印一下var_dump($son);

clipboard.png

会发现有2个private pri。因为继承只会继承父类公有的和受保护的方法和属性。

又因为getpri()没有被覆盖,所以会保留其原有功能(该方法在father里,所以$this->pri访问的是父类的private pri)

父类中被声明为public或protected的属性可以被子类继承,而且在子类中的修改会影响到父类,父类中的修改也同样会影响子类。
父类中声明为private的属性不会被继承,只是为子类中的属性赋值,与父类的属性没有任何关系,仅仅只是名字相同。因而在子类中的修改并不会影响到父类。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题