檢查下面給出的代碼。我無法理解它是如何調用Class Bar類的testPrivate()方法的。根據我的假設,它應該從Foo類調用方法,即Foo :: testPrivate。php OOP - 與方法可見性有關
<?php
class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "Bar::testPublic\n";
}
private function testPrivate() {
echo "<br>Bar::testPrivate\n";
}
}
class Foo extends Bar
{
public function testPublic() {
echo "<br>Foo::testPublic\n";
}
private function testPrivate() {
echo "<br>Foo::testPrivate\n";
}
}
$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate
// Foo::testPublic
?>
是的..你說得對...但我不清楚這段代碼。 Bar :: test()是公開的。所以它會在Foo類中繼承。所以現在當它從Foo對象被調用時,它應該調用foo類的私有方法,即Foo :: testPrivate。 – 2011-03-17 06:42:30
除了'Bar :: test()'方法在'Foo'類中沒有被重載:它在'Bar'類中,並且,因爲你的'testPrivate'方法是私有的。如果你重載'Foo'類中的'test()'方法,並且'testPrivate'保持私有狀態,那麼將會調用'Foo :: private'。 – 2011-03-17 06:45:08
這就是我的想法。它應該調用Foo :: testPrivate而不是Bar :: testPrivate。但是當我們執行代碼時,它調用Bar :: testPrivate。這是我很混亂。此代碼來自OOP php maual中的visibility - > Method Visibility部分。 – 2011-03-17 06:47:36