@golova12

Статические свойства класса в PHP?

Раньше никогда их не использовал, но меня очень заинтересовала эта возможность языка. Ранее я пользовался статическими методами как небольшими вспомогательными функциями, которым для работы не нужен контекст объекта, его состояние и т.п. (или создавал вспомогательные классы, состоящие только из статических методов). Но зачем ввели статические свойства, да еще и с возможностью делать их приватными? По сути получается объект без объекта. который может задавать состояние и считавать его так же, как и обычный объект, создаваемый с помощью new, с той только разницей, что он не имеет конструктора и еще некоторых возможностей:
<?php

class StaticClass
{
    private static $property;

    public static function setProp($value)
    {
        self::$property = $value;
    }

    public static function getProp()
    {
        $prop = self::$property;

        return self::doSomething($prop);
    }

    private static function doSomething($arg)
    {
        // что-то делаем
        return $arg;
    }
}

StaticClass::doSomething(1); // нельзя
StaticClass::$property = 1; // нельзя

StaticClass::setProp(2);
StaticClass::getProp(); // 2


Мне хотелось бы понять, как нужно использовать эту возможность и как статические переменные влияют на производительность и потребление памяти?
  • Вопрос задан
  • 668 просмотров
Пригласить эксперта
Ответы на вопрос 2
edli007
@edli007
full stack, team lead
Видно вы не работали с паттернами. Суть статики что такое свойство будет общим на все объекты данного класса.
Прочтите о синглетоне, через пару дней, как разберетесь, все вопросы отпадут.
Ответ написан
Комментировать
Marcuzy
@Marcuzy
php разработчик
Когда сущность нужна только в одном экземпляре какой смысл создавать объект?
Очень простой пример - хелперы (Array Helper). Просто подключаешь хелпер и получаешь набор функций, объединенных общей целью в одной сущности - это улучшает семантику кода + плюшки ооп, например наследование.

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

Еще одно полезное применение статических методов - это паттерн "Фабричный метод".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы