PHP: полиморфные абстрактные статические методы - PullRequest
1 голос
/ 06 декабря 2010

Я пытаюсь сделать что-то подобное, но у меня ничего не получается.

abstract class Animal 
{ 
    abstract static function getName();
    static function sayName() { echo self::getName(); }
}

спасибо! * * 1004

Ответы [ 4 ]

7 голосов
/ 06 января 2013

У вас есть две проблемы:

  1. Статические функции больше не могут быть отменены в php.
  2. Как уже говорилось ранее, поздняя статическая привязка: поскольку метод getName () определен в дочернем классе, вам нужно обращаться к нему с помощью static :: getName () вместо self :: getName ()
6 голосов
/ 06 декабря 2010

Было бы неплохо, если бы вы дали намек на как у вас "не получилось", но я полагаю, вы наткнулись на статические привязки и вам нужно использовать поздние статические привязки введены в PHP 5.3.

1 голос
/ 06 августа 2011

Это не удастся - у вас не может быть абстрактной статической функции.См. Принятый ответ Почему PHP 5.2+ запрещает методы абстрактного статического класса? , чтобы узнать, почему.

1 голос
/ 06 декабря 2010

Полагаю, возможно, вы пытаетесь создать экземпляр объекта из этого класса.

Вы не можете . Это abstract класс. Подкласс это, а затем создать экземпляр этого.

...