我不明白為什么列印 // Bar::testPrivate 和 // Foo::testPublic .... "$this" 有優先權嗎?我理解 Foo::testPublic 但 Bar::testPrivate 不在 這里輸入影像描述
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
?>
uj5u.com熱心網友回復:
非常感謝大家,作為總結并加入兩個答案(因為一個補充另一個),方法覆寫在處理私有方法時有其“意外”行為。對于受保護和公共方法,它按預期合理作業。我不知道成員可見性也是從父類到子類的,所以我假設如果我理解可見性。
uj5u.com熱心網友回復:
即使Foo擴展Bar和$myFoo是一個實體Foo,并$this指$myFoo這里; test()是的一部分,Bar并且testPrivate()是private在Foo等不訪問Bar。由于它不可訪問,它在Bar.
請參閱PHP:可見性。在您回答問題的示例頁面中有一條評論。
該手冊說“私有限制僅對定義專案的類的可見性”。這意味著擴展的子類看不到父類的私有方法,反之亦然。
因此,父類和子類可以有“相同”私有方法的不同實作,這取決于您呼叫它們的位置(例如父類或子類實體)。為什么?因為私有方法只對定義它們的類可見,子類看不到父類的私有方法。如果孩子沒有看到父母的私有方法,孩子就不能覆寫它們。范圍不同。換句話說——每個類都有一組其他人無法訪問的私有變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/329792.html
