php 私有方法在继承中的可见性[重复]

kmbjn2e3  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(98)

此问题在此处已有答案

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 -是调用对象的值。所以我们不能覆盖私有方法,或者我失去了什么?

ie3xauqp

ie3xauqp1#

由于方法覆盖只在动态绑定中工作,因此不可能覆盖私有方法。如果你用私有方法继承父类,那么私有方法在子类中将不可用,因此,你不能覆盖这些方法。
你的情况怎么样
1.创建子类引用
1.调用foo方法。
1.首先,它将检查子类中的foo方法。
1.由于在类外部没有私有方法可访问,因此它将进入父类并找到foo方法。
1.如果它找到了,那么它将执行在我们的例子中发生的函数。
所以你可以解决这个问题,只需根据情况将方法从private改为public/protected,然后一切都会顺利进行。

相关问题