Я с трудом пытаясь понять вывод следующего кода:Закрытый метод наиважнейшая и видимость
class Bar
{
public function test() {
$this->testPublic();
$this->testPrivate();
}
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();
Выходные:
Foo::testPublic
Bar::testPrivate
Класс Foo переопределяет testPublic() и testPrivate(), и наследует тест(). Когда я называю тест(), имеется явная инструкция envolving $ это псевдо переменной, поэтому после того, как я создал $ MYFOO экземпляра, окончательные вызовы теста() функция будет $ myFoo-> testPublic() и $ myFoo-> testPrivate(). Первый вывод, как я и ожидал, так как я перепробовал testPublic() метод для эха Foo :: testPublic. Но второй вывод не имеет для меня никакого смысла. Почему это Бар :: testPrivate if I overrode testPrivate() метод? Также частный метод из родительского класса не будет наследоваться, по определению! Это не имеет никакого смысла. Почему родительский метод называется вызываемым ???
Рассмотрите возможность изменения 'public function test() { $ this-> testPublic(); $ this-> testPrivate(); } 'to' public function test() { $ this-> testPublic(); static :: testPrivate(); } '- затем прочитайте о [позднем статическом привязке] (http://www.php.net/lsb) (в частности, примере № 3) –
@MarkBaker эти методы вызывают в контексте объекта, а не статичны, поэтому поздняя статическая привязка делает не применять. Это была простая проблема видимости. – Mark
@rainfromheaven - я специально ссылался на __Example # 3__ в своем комментарии: «static :: use в контексте __non-static__» .... т. Е. В вопросе __объекта__.Последнее статическое связывание применяется точно так же, как указано в этой части документов. –