Почему PHP 5.2 + запрещает абстрактные статические методы класса?
после включения строгих предупреждений в PHP 5.2 я увидел загрузку строгих предупреждений стандартов из проекта, который изначально был написан без строгих предупреждений:
Строгим Стандартам:статическая функция Program:: getSelectSQL ()не должно быть абстрактным в программе.класс.inc
рассматриваемая функция принадлежит абстрактной программе родительского класса и объявлена абстрактной статической, потому что она должна быть реализовано в его дочерних классах, таких как TVProgram.
Я нашел ссылки на это изменение здесь:
отброшены абстрактные статические функции класса. Из-за недосмотра, PHP 5.0.x и 5.1.x разрешены абстрактные статические функции в классах. Начиная с PHP 5.2.х, только интерфейсы могут иметь их.
мой вопрос: Может ли кто-нибудь объяснить ясно, почему в PHP не должно быть абстрактной статической функции?
1 ответ:
статические методы принадлежат классу, который объявил их. При расширении класса вы можете создать статический метод с тем же именем, но на самом деле вы не реализуете статический абстрактный метод.
то же самое касается расширения любого класса со статическими методами. Если вы расширяете этот класс и создаете статический метод с той же сигнатурой, вы фактически не переопределяете статический метод суперкласса
EDIT (сентябрь. 16, 2009 г.)
Обновите об этом. Запустив PHP 5.3, я вижу, что абстрактная статика вернулась, хорошо это или плохо. (см. http://php.net/lsb для получения дополнительной информации)коррекция (по philfreo)
abstract static
по-прежнему не допускается в PHP 5.3,LSB связано, но отличается.