Общее мнение относительно статики в PHP таково: Избегайте, если это вообще возможно. И да, в 99% случаев можно избежать статики.
Синглтонов следует избегать в 100% случаев. По причинам, которые вы можете найти здесь и практически везде в Интернете. Синглтоны похожи на коммунизм: звучит как хорошая идея, но когда ее реализуют на практике, оказывается, что есть одна или две вещи, которых вы не ожидали.
Основная цель синглтона — сохранять состояние, но сам PHP не имеет состояния. , так что приходит следующий запрос, синглтон все равно нужно повторно инициализировать.
Если я пишу геттеры, подобные вашим, я склонен создавать их с ленивой загрузкой:
class Example
{
private $reviewModel = null;//create property
public function getReviewModel()
{
if ($this->reviewModel === null)
{//load once the method is called, the first time
$this->reviewModel = $this->load->model('review_model');
}
return $this->reviewModel;
}
}
Это в основном делает то же самое, без использования статики. Поскольку я использую свойство, я по-прежнему сохраняю экземпляр, поэтому, если метод getReviewModel вызывается снова, вызов load->model пропускается, как и при использовании статического метода.
Однако, поскольку вы спрашиваете о производительности а также стандарты кодирования: статика немного медленнее, чем свойства экземпляра: у каждого экземпляра есть HashTable, содержащая его свойства, и указатель на его определение. Статические свойства находятся в последнем, поскольку они являются общими для всех экземпляров, поэтому статическое свойство требует дополнительной работы по поиску:
instance -> HashTable -> property
instance -> definition -> HashTable -> property
Это не полная история, проверьте ответ + ссылки здесь, но в основном: путь к статическому свойству длиннее.
Что касается стандартов кодирования: они существуют, хотя пока еще неофициальны, большинство крупных игроков подписываются на них, и вам следует: PHP -FIG
Такие вещи, как $this->_protectedProperty;, например, не соответствуют стандарту PSR-2, в котором совершенно недвусмысленно говорится:
Имена свойств НЕ ДОЛЖНЫ иметь префикс с одним подчеркиванием, чтобы указать защищенную или частную видимость.
person
Elias Van Ootegem
schedule
03.02.2014