Задать вопрос
@yellow_pus

Как правильно сделать сохранение «глобальной переменной»?

Насколько я знаю, использование глобальных переменных - плохая практика. На замену приходит синглтон. Я хочу сделать следующим образом: Есть функция в классе, которая бы сохраняла определенные данные в переменной, я написал этот класс так
class save
{
    public $data;
    public static $instance;

    public function __construct()
    {
    }

    public static function getInstance()
    {
        if (empty(self::$instance)) {
            self::$instance = new save();
        }
        return self::$instance;
    }

    public function setData(string $value)
    {
        $this->data = $value;
    }
}
.
После, к этой функцией обращаются из первого(любого) класса, сохраняя что либо, я написал так:
class A
{
    public static function tryW()
    {
        $t = save::getInstance();
        $t->setData('part');
    }
}

Далее у меня ступор. Хочу в классе B, внутри метода обратиться к этому сохраненному значению в переменной. Я понимаю, что делаю это неправильно, пожалуйста поправьте меня:
class B
{
    public static function tryGet()
    {
        $get = save::getInstance();
        var_dump($get);
    }
}
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Средний Комментировать
Решение пользователя Дмитрий К ответам на вопрос (2)
iMedved2009
@iMedved2009
Не люблю людей
Singleton - тоже плохая практика

class Single
{
    public array $data = [];
    public static $instance;

    PRIVATE function __construct()
    {
    }

    public static function getInstance()
    {
        if (empty(self::$instance)) {
            self::$instance = new Single();
        }
        return self::$instance;
    }

    public function __get(string $key)
    {
        return $this->data[$key]??null;
    }

    public function __set(string $key, $value)
    {
        $this->data[$key] = $value;
    }
}

class A
{
    public static function tryW()
    {
        Single::getInstance()->some = 1;
    }
}

class B
{
    public static function tryR()
    {
        var_dump(Single::getInstance()->some);
    }
}

$a = new A();
$a->tryW();

$b = new B();
$b->tryR();
Ответ написан