Как заставить родительские функции PHP ссылаться на переопределенные функции в дочерних, если они существуют? - PullRequest
1 голос
/ 01 ноября 2019

Учитывая следующий код:

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:: два получили информацию: результаты от ребенка :: один

Кажется, что, хотя переопределения работают, они не работают рекурсивно, только при прямом вызове от ребенка. Есть ли способ гарантировать, что когда дочерний класс обращается к методу из родительского класса, родительские методы ссылаются на переопределенные методы, когда они существуют?

Спасибо

1 Ответ

0 голосов
/ 01 ноября 2019

Вы, вероятно, ищете поздние привязки. Простое изменение с self::one() на static::one() должно помочь.

return "Parent::two got info: ".static::one();
...