Следующий фрагмент кода вызовет метод test () в классе Bar, поскольку вы не переопределяете метод test () в классе Foo
$myFoo = new Foo();
$myFoo->test();
Следовательно, этот метод будет запущен из класса Бар
public function test() {
echo "<br>";
$this->testPrivate();
$this->testPublic();
}
Когда вы вызываете $ this-> testPrivate (), он выведет testPrivate () из Bar как
Bar :: testPrivaten, поскольку частные методы являются частными для класса и не могут быть переопределены
Далее вы вызываете $ this-> testPublic (). Поскольку вы уже переопределили этот метод в классе Foo, он вызовет метод testPublic () из Foo чем Bar. Следовательно, он будет печатать
Foo :: testPublicn
Итак, вы закончите как
Bar :: testPrivatenFoo :: testPublicn
Но для этого нет никаких шансов
Ok, so ShowBar() I would expect will output "Bar::testPrivaten" It outputs "Bar::testPublicn", great.
Ok, so ShowFoo() I would expect will output "Bar::testPrivaten" but it actually outputs "Foo::testPublicn".
Я только что проверил ваш код и получил следующее
Bar::testPrivatenFoo::testPublicn
Bar::testPrivaten
Foo::testPrivaten
Пожалуйста, не забудьте дать правильный результат