@romicohen
Системный Архитектор

В чем ключевое ПРАКТИЧЕСКОЕ отличие статических переменных и методов от обычных? Просто более компактный код?

В который раз, сижу пишу код и параллельно думаю:

- В чем вообще соль статических методов и переменных, неужели просто чтобы лишний раз new Class() не писать? ))

Ну, как бы оно тоже имеет право на жизнь, но мне кажется должны быть какие-то более веские причины к тому, чтобы вводить лишнюю сущность - только вот мне они не известны))

Просветите пожалуйста, кто знает?
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
@BorisKorobkov Куратор тега PHP
Web developer
Статическая переменная всегда в единственном экземпляре. Должна использоваться только в исключительных случаях, например, для Singleton.
Динамическая - для каждого экземпляра своя.

Статическая функция должна быть immutable, то есть зависеть только от входных параметров. Обычно так делают хелперы.
Динамическую функцию обычно делают mutable, то есть она влияет на внутренние переменные объекта или зависит от них.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
class Demo {
  static private $db = null;
  static private $cache = [];

  static protected function getDb() {
    if(self::$db === null) {
      self::$db = ... // init $db
    }
    return self::$db;
  }

  static protected function cachedAction($arg) {
    if(!array_key_exist($arg, self::$cache)) {
      self::$cache[$arg] = ... // do action
    }
    return self::$cache[$arg];
  }
}

class DemoChild : public Demo  {
}

$a = new Demo();
$b = new DemoChild();
$a->getDb()->query();
$b->getDb()->query(); // uses the same connection
$c = $a->cachedAction('one');
$d = $b->cachedAction('one'); // no action, cache used
Ответ написан
vabka
@vabka
Токсичный шарпист
ПРАКТИЧЕСКОЕ отличие

Не нужно создавать экземпляр объекта, чтобы вызвать. Вот и всё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы