PHP: ошибка вызова неопределенного метода при вызове статического метода из родительского - PullRequest
4 голосов
/ 24 июня 2010

Как правильно вызвать метод дочернего класса из родительского класса, если оба статические?

Когда я использую статические классы, это возвращает ошибку " Вызов неопределенного метода A :: multi()", однако при использовании нестатических методов проблем не возникает, например:

//-------------- STATIC ------------------
class A {
    public static function calc($a,$b) {
        return self::multi($a, $b);
    }
}
class B extends A {
    public static function multi($a, $b) {
        return $a*$b;
    }
}
echo B::calc(3,4); //ERROR!!

//-------------- NON-STATIC ----------------
class C {
    public function calc($a,$b) {
        return $this->multi($a, $b);
    }
}
class D extends C {
    public function multi($a, $b) {
        return $a*$b;
    }
}
$D = new D();
echo $D->calc(3,4); // Returns: 12

Есть ли способ вызвать дочерний статический метод, не зная его имя класса?

1 Ответ

5 голосов
/ 24 июня 2010

Это возможно только в PHP 5.3 и новее, с поздними статическими привязками , где PHP 5.3 может получить доступ к статическим членам в подклассах вместо того, к какому классу относится self, потому что он разрешается во время выполнениявместо времени компиляции.

К сожалению, я не думаю, что есть решение для этого в PHP 5.2 и старше.

...