Я переписал сейчас код. Получилось 3 синглтона: база, пользователь, данные (настройки, конфиги, хранилище). Собственно, я и раньше конструкцию синглтона использовал, только не знал, что это синглтон. А необходимость такая у меня возникала при работе статических методов с нестатическими. И как быть с наследованием статических методов?
Или копированием, если тот же класс БД использует две базы.
Да, я уже понял, просто раньше не использовал. Но со статическим классом также нельзя
$class = new Class()->method($param);, т.е. минимум 2 строчки, а с синглтоном одна.
Или я вас не понял или вы меня.
Я имел ввиду, например, что вместо
$class = new Class();
$class->vars($get); (или class::vars($get))
Можно написать
$class::getInstance()->vars($get);
Но у меня три паттерна, а не один общий. В моем случае это выглядит так:
Data::get()->page($_SERVER['REQUEST_URI']);
Т.е. это как довод в пользу использования Синглтона.
-----
Наличие статических методов создает проблемы при наследовании классов или создании экземпляров класса. Как раз и для такой ситуации может пригодиться синглтон.
я не понимаю как можно подключаться 100 раз. Мы же подключаемся в __construct, ссылку на подключение сохраняем в переменной класса (это нужно для mysqli), а дальше уже из методов вызываем, например mysqli_query(self::$dblink, self::parse($query) ).
может имеется ввиду создание экземпляра класса БД в других классах? так мы же используем статику и вызов и из других классов уже происходит без подключения, например, так db::query($q); Статические методы и так доступны из всех классов.
Я думаю дело в том, что большинство мануалов по синглтонам бестолковые. Там пишут что то вроде "подключаться к БД один раз, а не делать 100 подключений из каждого файла" и программист думает "ну тогда я и статическим классом обойдусь". Про реальные преимущества синглотнов мало инфы.
Пока для себя нашел два. Это такая конструкция, например, data::get()->settings($param)->tree($param).
Второе преимущество: возможность наследовать классы. Например, если у нас есть расширенная версия класса Login с подключением через социальные сети, допустим, LoginSoc, тогда мы его объединяем с общим классом Login. Наличие статически методов в этом случае создает дополнительные сложности.
Aisamiery, а вы используете синглтоны, если да, то как и где?
А если нужно передать параметры, например, так: singlton::getInstance()->setvars($_GET, $_POST);