Почему PHP 5.2 + запрещает абстрактные статические методы класса?


после включения строгих предупреждений в PHP 5.2 я увидел загрузку строгих предупреждений стандартов из проекта, который изначально был написан без строгих предупреждений:

Строгим Стандартам:статическая функция Program:: getSelectSQL ()не должно быть абстрактным в программе.класс.inc

рассматриваемая функция принадлежит абстрактной программе родительского класса и объявлена абстрактной статической, потому что она должна быть реализовано в его дочерних классах, таких как TVProgram.

Я нашел ссылки на это изменение здесь:

отброшены абстрактные статические функции класса. Из-за недосмотра, PHP 5.0.x и 5.1.x разрешены абстрактные статические функции в классах. Начиная с PHP 5.2.х, только интерфейсы могут иметь их.

мой вопрос: Может ли кто-нибудь объяснить ясно, почему в PHP не должно быть абстрактной статической функции?

1 117

1 ответ:

статические методы принадлежат классу, который объявил их. При расширении класса вы можете создать статический метод с тем же именем, но на самом деле вы не реализуете статический абстрактный метод.

то же самое касается расширения любого класса со статическими методами. Если вы расширяете этот класс и создаете статический метод с той же сигнатурой, вы фактически не переопределяете статический метод суперкласса

EDIT (сентябрь. 16, 2009 г.)
Обновите об этом. Запустив PHP 5.3, я вижу, что абстрактная статика вернулась, хорошо это или плохо. (см. http://php.net/lsb для получения дополнительной информации)

коррекция (по philfreo)
abstract static по-прежнему не допускается в PHP 5.3,LSB связано, но отличается.