我從php手冊中的示例中感到困惑。這是關於可見性。這裏是例子。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();
?>
http://www.php.net/manual/en/language.oop5.visibility.php
這個例子輸出
Bar::testPrivate
Foo::testPublic
請你能解釋一下這是如何發生的呢?
爲什麼兩個testPublic()
都不叫?
我在Bar類構造中放了一個var_dump($this)
。它打印object(Foo)[1]
。我知道的事情是私人物業可以被稱爲同一類。
那麼如何調用「Bar::testPrivate
」?
+1爲什麼不能'test()'(它是Bar的'test()')調用'Foo'的'testPrivate()'?因爲它是私密的,你不想讓父母撫摸他們孩子的私生子,你呢? – NullUserException
@NullUserException這是一個很好的觀點哈哈! –
關於'testPublic()'的混淆的一部分,我想,PHP是替代重寫而不是重寫的優化。這意味着PHP不會在孩子中調用父母的方法,除非你明確地要求它這樣做(例如:'parent :: testPublic();')。 – NullUserException