Учитывая следующий код:
class A {
public static function one() {
return "results from Parent::one";
}
public function two() {
return "Parent::two got info: ".self::one();
}
}
class B extends A {
public static function one() {
return "results from child::one";
}
}
$a=new B();
print "calling two I get: ". $a->two()."\n";
print "calling one I get: ". $a->one()."\n\n";
Я получаю следующие результаты:
вызову два я получаю: Parent :: two получил информацию: результаты из Parent :: one
вызов одного получен: результаты child :: one
Я ожидал, что первый результат выше будет:
вызов двух получен: Parent:: два получили информацию: результаты от ребенка :: один
Кажется, что, хотя переопределения работают, они не работают рекурсивно, только при прямом вызове от ребенка. Есть ли способ гарантировать, что когда дочерний класс обращается к методу из родительского класса, родительские методы ссылаются на переопределенные методы, когда они существуют?
Спасибо