Метод определения метода наследования PHP
<?php
class A {
private function foo() {
echo "baf!<br/>";
}
public function test() {
$this->foo();
}
}
class C extends A {
private function foo() {
echo "bar!<br/>";
}
}
$c = new C();
$c->test(); //Prints baf!
?>
Как сделать c->test()
для печати строки!? Я ожидал, что foo()
будет переопределено в C
и будет печатать панель! может кто-нибудь объяснить это мне?
Ответы
Ответ 1
Используя оба метода защиты, вы достигнете желаемого результата; причина в том, что в пределах A::test()
он может разрешить только $this->foo()
до A::foo()
из-за видимости private
. См. Visibility.
class A {
protected function foo() {
echo "baf!<br/>";
}
public function test() {
$this->foo();
}
}
class C extends A {
protected function foo() {
echo "bar!<br/>";
}
}
$c = new C();
$c->test(); //Prints bar!
Ответ 2
class A {
protected function foo() {
echo "baf!<br/>";
}
public function test() {
$this->foo();
}
}
class C extends A {
protected function foo() {
echo "bar!<br/>";
}
}
$c = new C();
$c->test(); //Prints baf!
просто сделайте обе функции foo общедоступной или защищенной.