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,而不是B从B::privateMethod,因为后者是不可见光A::test作为解释这里。
我还能如何以最简洁的方式修改此私有库方法的行为(例如,无需通过复制整个类并进行更改来进行代码重复)?
那是因为private仅在类本身的范围内。我曾经用过,protected您会重写该函数,因为protected方法意味着它可用于子类。