扩展另一个的PHP类如何继承私有函数?

Ken*_*ogt 8 php inheritance class

我试图扩展PHP类而不重写整个事情.这是一个例子:

<?
$a = new foo();
print $a->xxx();
$b = new bar();
print $b->xxx();

class foo {
  const something = 10;

  public function xxx() {
    $this->setSomething();
    return $this->something;
  }

  private function setSomething() {
    $this->something = self::something;
  }
}

class bar extends foo {

  public function xxx() {
    $this->setSomething();
    $this->something++;
    return $this->something;
  }

}
?>
Run Code Online (Sandbox Code Playgroud)

但是当我运行脚本时,我收到以下错误:

Fatal error: Call to private method foo::setSomething() from context 'bar' in test.php on line 23
Run Code Online (Sandbox Code Playgroud)

似乎bar不继承私有函数setSomething().如何在不修改foo类的情况下解决这个问题?

Shi*_*dim 14

,你不能在不修改foo类的情况下解决这个问题.因为继承的类无法访问父类的私有成员.这是一个非常基本的规则.

声明setSomething()protected.它会被解决.

手册


Sha*_*ngh 7

私有成员不可继承,您不能在子类中使用它们.课外无法访问它们.

您必须将该功能设为受保护或公开.受保护的成员可以访问该类和继承的类.所以,你最好的选择是保护该功能.


dec*_*eze 6

bar继承正常的功能,但它不能调用它.这是private方法的全部要点,只有声明类可以调用它们.

  • 更好的方法是在父类中使用protected;)这样它从外部保持私有,但"child"类可以访问它. (5认同)