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

Я в первую очередь ошибаюсь, начав писать код на Python без чтения PEP. Худшее, что я хотел бы процитировать:

ПРИМЕЧАНИЕ. Здесь я цитирую

1

foo       =  bar

foobar    =  bar

foobarbuz =  bar

2

foo = "foo"
bar = "bar"
foobar = foo + bar //string concat

3

foo = [1,2,3,4,5,6]
foo_ = []
for bar in foo:
  foo_.append(bar)

4

написание операторов импорта с именем проекта

from projectname.appname.models import model

5

Попытка использовать представление как обычный питон functions

Обновление: или слишком много логики в представлении, скорее, что-то перемещая к помощнику (utils), я имею в виду, что здесь плохая практика - делать перенаправление. Есть люди, которые пишут вспомогательные функции в представлении ,

6

Функция / метод без строки документа и использование пространства имен, никак не связанного с контекстом.

120
задан Mark Amery 25 March 2017 в 16:31
поделиться

4 ответа

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

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

EDIT (16 сентября 2009 г.)
вы можете создать статический метод с тем же именем, но на самом деле вы не реализуете статический абстрактный метод.

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

EDIT (16 сентября 2009 г.)
вы можете создать статический метод с тем же именем, но на самом деле вы не реализуете статический абстрактный метод.

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

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

ИСПРАВЛЕНИЕ (от philfreo)
абстрактная статика все еще не разрешена в PHP 5.3, ] LSB связан, но отличается.

76
ответ дан 24 November 2019 в 01:38
поделиться

Изучите проблемы PHP «Позднее статическое связывание». Если вы помещаете статические методы в абстрактные классы, вы, вероятно, столкнетесь с этим раньше, чем позже. Имеет смысл, что строгие предупреждения призывают вас избегать использования некорректных языковых функций.

-1
ответ дан 24 November 2019 в 01:38
поделиться

Я бы сказал, что можно увидеть абстрактный класс / интерфейс как договор между программистами. Он больше касается того, как вещи должны выглядеть / вести себя, а не реализовывать фактическую функциональность. Как видно из php5.0 и 5.1.x, это не естественный закон, который мешает разработчикам php делать это, а побуждение идти вместе с другими шаблонами проектирования OO на других языках. В основном эти идеи пытаются предотвратить неожиданное поведение, если кто-то уже знаком с другими языками.

Он больше касается того, как вещи должны выглядеть / вести себя, а не реализовывать фактическую функциональность. Как видно из php5.0 и 5.1.x, это не естественный закон, который мешает разработчикам php делать это, а побуждение идти вместе с другими шаблонами проектирования OO на других языках. В основном эти идеи пытаются предотвратить неожиданное поведение, если кто-то уже знаком с другими языками.

Он больше касается того, как вещи должны выглядеть / вести себя, а не реализовывать фактическую функциональность. Как видно из php5.0 и 5.1.x, это не естественный закон, который мешает разработчикам php делать это, а побуждение идти вместе с другими шаблонами проектирования OO на других языках. В основном эти идеи пытаются предотвратить неожиданное поведение, если кто-то уже знаком с другими языками.

4
ответ дан 24 November 2019 в 01:38
поделиться

Я знаю, что это устарело, но ....

Почему бы просто не выбросить исключение в статическом методе родительского класса, иначе, если вы не переопределите его, возникнет исключение.

12
ответ дан 24 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: