如何从库类重写私有方法

hie*_*ppe 0 php overriding private

给出以下类,这些类具有A来自外部库的类,因此我无法更改它:

class A {
    public function test () {
        $this->privateMethod();
    }
    private function privateMethod () {
        echo('A');
    }
}

class B extends A {
    private function privateMethod () {
        echo('B');
    }
}

$b = new B();
$b->test();
Run Code Online (Sandbox Code Playgroud)

这导致在A被打印出来通过A::privateMethod,而不是BB::privateMethod,因为后者是不可见光A::test作为解释这里

我还能如何以最简洁的方式修改此私有库方法的行为(例如,无需通过复制整个类并进行更改来进行代码重复)?

Daa*_*aan 5

那是因为private仅在类本身的范围内。我曾经用过,protected您会重写该函数,因为protected方法意味着它可用于子类。

  • 我认为这不能回答问题。OP表示这是一个库,因此他无法更改访问修饰符。 (2认同)