Задать вопрос
@romicohen
Системный Архитектор

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

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

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

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

Просветите пожалуйста, кто знает?
  • Вопрос задан
  • 219 просмотров
Подписаться 2 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
Ответ написан
ПРАКТИЧЕСКОЕ отличие

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽