我沒有得到爲什麼代碼的第一個輸出打印「Bar :: testPrivate」,因爲我們使用子類的實例調用父類的測試方法。因此,在測試函數中調用「$ this-> testPrivate();」的第一行代碼時,應該調用子類的testPrivate方法,從而打印「Foo :: testPrivate」而不是「Bar :: testPrivate」。請幫我用這個在php.net網站上的代碼
<pre>
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
</pre>
讓我們來看看流程...說$ myFoo-> test();將調用父類的測試方法。現在在測試方法中,第一個語句是$ this-> testPrivate()... $ this在這個上下文中應該引用$ myFoo ...因此我們可以查看調用$ this - > testPrivate()作爲$ myFoo-> testPrivate()...應該調用Foo類的testPrivate()方法... Plz告訴我我要去哪裏錯... – user2939602
我不完全正面它會回到代碼的那一部分,無論是通過堆棧還是通過什麼途徑,但無論哪種方式,您的代碼都在「Bar」類中。因此,任何對「$ this」的引用都是對它實際寫入的任何類的引用。感謝Paulo,對於編輯。 – seemywingz
@seemywingz ..「因此,任何對$ this的引用都是對它實際寫入的任何類的引用」....如果這是真的,那麼調用$ this-> testPublic();通過$ myFoo-> test();應該會導致Bar :: testPublic而不是Foo :: testPublic ...但這不是這種情況...我真的無法得到它... Plz解釋.. – user2939602