В этом вопросе 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 удалил поддержку для издевательских статических методов).