static :: vs. self :: – есть ли недостатки?

В этом вопросе StackOverflow я узнал, что self:: не было наследованием, когда static:: was (в PHP). Когда дело доходит до определения группы констант внутри класса, если вы хотите переопределить эти константы в подклассе для изменения по умолчанию «поведения», становится необходимо использовать static:: так, чтобы метод родительского класса, который ссылается на константу , чтит «переопределение».

В течение 2 лет с тех пор, как я задал этот оригинальный вопрос, я начал использовать static:: extensively, до такой степени, что я редко использую self:: поскольку self:: , казалось бы, ограничивал расширяемость класса, который использует константы, где static:: не имеет этого ограничения.

Даже если я не намереваюсь, чтобы константа была переопределена в дочернем классе, я в конечном итоге использую static:: , на всякий случай – поэтому мне не нужно делать кучу поиска и замены позже, если это Оказывается, я хочу расширить класс и переопределить константу.

Однако в коде других я редко вижу использование static:: . До такой степени, что до 2012 года я даже не знал, что он существует. Так почему же не общепринятая практика использовать static:: in place of self:: как self:: собой разумеющееся?

Поэтому мой вопрос: есть ли очевидные недостатки использования static:: для ссылки на константы класса, в отличие от self:: ? Виноват ли я в использовании грубой анти-картины здесь?

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

    С точки зрения выступлений, self и static довольно эквивалентны.

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

    Для прямого ответа на ваш вопрос я всегда предпочел бы использование static для целей тестирования (теперь PHPUnit 4 удалил поддержку для издевательских статических методов).