重写私有方法时的奇怪行为
2022-08-30 19:02:48
请考虑以下代码段:
class foo {
private function m() {
echo 'foo->m() ';
}
public function call() {
$this->m();
}
}
class bar extends foo {
private function m() {
echo 'bar->m() ';
}
public function callbar() {
$this->m();
}
}
$bar = new bar;
$bar->call();
$bar->callbar();
现在,更改方法的可见性,我得到:
( for ,m()
+
public
-
private
)
Visibility bar->call() bar->callbar()
======================================================
-foo->m(), -bar->m() foo->m() bar->m()
-foo->m(), +bar->m() foo->m() bar->m()
+foo->m(), -bar->m() ERROR ERROR
+foo->m(), +bar->m() bar->m() bar->m()
(protected
似乎表现得像)。public
我期望一切都像声明时一样。但是,尽管 和 本质上是相同的,但它们根据 in 和 的可见性产生不同的结果。为什么会发生这种情况?public
foo->call()
bar->callbar()
m()
foo
bar