在文档中是这个例子并且没有问题地理解它
class Bar{
public function test() {
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "Bar::testPublic\n";
}
private function testPrivate() {
echo "Bar::testPrivate\n";
}
}
class Foo extends Bar{
public function testPublic() {
echo "Foo::testPublic\n";
}
private function testPrivate() {
echo "Foo::testPrivate\n";
}
}
$myFoo = new foo();
$myFoo->test();
结果是:
但现在重新定义类foo中的test()方法
class Bar{
public function test() {
echo '<br>Im Bar::test';
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "<br>Bar::testPublic\n";
}
private function testPrivate() {
echo "<br>Bar::testPrivate\n";
}
}
class Foo extends Bar{
public function test() {
echo '<br>Im Foo::test';
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "<br>Foo::testPublic\n";
}
private function testPrivate() {
echo "<br>Foo::testPrivate\n";
}
}
$myFoo = new Foo();
$myFoo->test();
结果是:
php允许我覆盖私有方法testPrivate(),为什么?
答案 0 :(得分:1)
为什么不呢?很难回答这个问题,因为它只是PHP的工作方式。如果您想禁止覆盖您的方法,则可以使用final
关键字。
此外,在您的示例中,如果您未在Foo中声明私有方法,则会出现错误,因为Foo在技术上没有该方法的定义。 扩展类无法查看其父类中的任何私有属性或方法。