请看下面给出的代码。
<?php
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(); // Bar::testPrivate
// Foo::testPublic
?>
在上面的示例中,当我们调用$myFoo->test();
时,它调用了testPrivate
Bar class
但它怎么称为testPublic
类的Foo
。
任何人都可以帮助我吗?
答案 0 :(得分:0)
Bar.testPrivate
和Foo.testPrivate
必须是受保护的方法,而不是私有方法。请点击此处了解更多信息:
答案 1 :(得分:0)
因为test()不在Foo中并且在Bar范围内运行。条形范围无法访问Foo私有方法。 只需将test()添加到Foo ...
答案 2 :(得分:0)
确实,可见性页面上的一条评论确实重申了这一点:
“私有方法从不参与覆盖,因为这些方法在子类中不可见。”
它确实感觉有点奇怪,因为你会认为子类会覆盖方法名称相同的父类,但不是私有方法的情况,而parent方法在这里需要预先考虑,所以最好使用protected方法,如果你想覆盖。