我从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/zh/language.oop5.visibility.php
以下是示例输出:
Bar::testPrivate
Foo::testPublic
请问这是如何发生的?
为什么两个
testPublic()
都没有被调用?我在Bar类的构造函数中放置了一个
var_dump($this)
。它打印出object(Foo)[1]
。我知道私有属性可以在同一个类中被调用。那么,"
Bar::testPrivate
"是如何被调用的呢?
test()
(即Bar
类的test()
方法)不能调用Foo
类的testPrivate()
方法呢?因为它是私有的,就像你不希望父母触碰孩子的私密部位一样。 - NullUserExceptiontestPublic()
的混淆部分是因为PHP执行替换覆盖而不是细化覆盖。这意味着除非您明确要求它这样做(例如:parent::testPublic();
),否则PHP不会在子类中调用父类的方法。 - NullUserException