Подробное описание см. в этом ответе.
В общем, то, что вы описываете, возможно, и PHP это позволяет. Но помните, что люди привыкли к полиморфизму и переопределению методов, поэтому, если ваш базовый класс позволяет переопределить какой-либо метод, а затем использует self
для его вызова, будет странно, что я не могу изменить поведение класса, хотя он предоставляет его в его API как метод public
или protected
.
ИМО, это нарушает принцип наименьшего удивления, упомянутый в книге Uncle Ben's Clean Code.
Кроме того, между привязками static
и $this
есть некоторые различия, потому что static
всегда будет пытаться ссылаться на элемент в более узкой, не всегда подходящей области. Это поведение представлено в этом примере и объясняется в примечании выше, на которое я ссылаюсь здесь:
В нестатических контекстах вызываемый класс будет классом экземпляра объекта. Поскольку $this->
попытается вызвать частные методы из той же области, использование static::
может дать разные результаты. Еще одно отличие состоит в том, что static::
может относиться только к статическим свойствам.
Таким образом, хотя возможно использовать static
в некоторых местах, где $this
уместно, ключевые слова static
были введены для использования статических методов и полей доступа, и их использование для других целей должно сбивать с толку.
person
fracz
schedule
02.11.2013