此问题在此处已有答案:
public/protected class properties don't override private properties on parent classes?(1个答案)
Why can child override and access its parent private method?(1个答案)
2年前关闭.
class A
{
private function foo() {
echo "A class success!\n";
}
public function test() {
echo get_class($this) . PHP_EOL; // C class here
var_dump($this) . PHP_EOL; // $this is object of C class here
$this->foo(); // but calling A class method foo here while we have our own foo in C. Why?
}
}
class C extends A
{
private function foo() {
echo "C class success!";
}
}
$c = new C();
$c->test();
输出
C
object(C)#1 (0) {
}
A class success!
型
我们在C类中覆盖了私有方法foo,但仍然调用A的foo。为什么?$this -是调用对象的值。所以我们不能覆盖私有方法,或者我失去了什么?
1条答案
按热度按时间ie3xauqp1#
由于方法覆盖只在动态绑定中工作,因此不可能覆盖私有方法。如果你用私有方法继承父类,那么私有方法在子类中将不可用,因此,你不能覆盖这些方法。
你的情况怎么样
1.创建子类引用
1.调用foo方法。
1.首先,它将检查子类中的foo方法。
1.由于在类外部没有私有方法可访问,因此它将进入父类并找到foo方法。
1.如果它找到了,那么它将执行在我们的例子中发生的函数。
所以你可以解决这个问题,只需根据情况将方法从private改为public/protected,然后一切都会顺利进行。