В документации этот пример и понять его без проблемПочему 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();
В результате получается:
- Bar :: testPrivate
- Foo :: testPublic
Но теперь заново метод test() в классе foo
class Bar{
public function test() {
echo '<br>Im Bar::test';
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "<br>Bar::testPublic\n";
}
private function testPrivate() {
echo "<br>Bar::testPrivate\n";
}
}
class Foo extends Bar{
public function test() {
echo '<br>Im Foo::test';
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "<br>Foo::testPublic\n";
}
private function testPrivate() {
echo "<br>Foo::testPrivate\n";
}
}
$myFoo = new Foo();
$myFoo->test();
Результат:
- Im Foo :: тест
- Foo :: testPrivate
- Foo :: testPublic
PHP позволяет мне переопределить метод частного testPrivate() , Зачем?
но документация говорит 'Члены, объявленные как частные, могут быть доступны только классом, который определяет member.' – ramboRam
также переопределяет частные функции, только если я переопределять метод испытания – ramboRam
В вашем примере, вы вызываете' Foo: : тест(); '. Когда вы вызываете метод с использованием '$ this', он будет пытаться вызвать методы внутри своего собственного определения, возвращаясь к родительскому, если у него нет определения. В вашем примере вы по существу создали новый класс ('Foo'), потому что вы перезаписали все методы. 'Foo :: test' вызывает' Foo :: testPrivate' и 'Foo :: testPublic' – Scopey