Помимо синглетонов, какие есть веские причины использовать статические методы в PHP? - PullRequest
7 голосов
/ 14 января 2011

Я недавно ответил на этот вопрос:

Какие веские причины использовать статические методы в PHP?

Первое, что пришло на ум, конечно же, былосинглтон.За небольшим исключением, другие ответчики привели тот же пример синглтона.Но это заставило меня задуматься ... На самом деле я никогда не использую статические методы или свойства для чего-либо, кроме создания синглетонов!

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

Мне действительно интересно: по какой причине мы должны создавать статические методы, отличные от создания синглетонов (или не просто лениться и требовать глобальной функции)?

У кого-нибудь есть прагматический пример использования статического метода, который не может быть лучше реализован с использованием динамического шаблона проектирования?Пример может быть одноэлементным, если это имеет смысл в его контексте, но меня интересуют другие причины, помимо одноэлементного аспекта решения.

Ответы [ 3 ]

6 голосов
/ 14 января 2011

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

Логическое место для следующего метода вPHPExcel входит в класс PHPExcel_Cell, поскольку он непосредственно связан с манипулированием адресом ячейки (любым адресом ячейки, а не только адресом конкретного экземпляра), но не зависит от экземпляра, поэтому я объявляю его статическим.

public static function stringFromColumnIndex($pColumnIndex = 0) {
    if ($pColumnIndex < 26) {
        return chr(65 + $pColumnIndex);
    } elseif ($pColumnIndex < 702) {
        return chr(64 + ($pColumnIndex / 26)).chr(65 + $pColumnIndex % 26);
    }
    return chr(64 + (($pColumnIndex - 26) / 676)).chr(65 + ((($pColumnIndex - 26) % 676) / 26)).chr(65 + $pColumnIndex % 26);
}

И этот метод не особенно сложен для проверки

4 голосов
/ 14 января 2011

Это не обязательно о шаблонах. PHP не является постоянной средой, поэтому время жизни любого экземпляра объекта может составлять миллисекунды, но это требует выделения / освобождения памяти и дополнительных циклов ЦП. Если вам не нужны повторно используемые объекты или коллекции, я считаю, что нестатические объекты не имеют достаточного обоснования.

2 голосов
/ 14 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...