Обычный синглтон имеет один статический метод: Код (PHP): <?php class Singleton { static $instance; public static function getInstance() { if (empty(self::$instance)) { self::$instance = new self; } return self::$instance; } private __construct() { /* конструктор пустой крайне редко */ } private __clone() {} public function fn($var) { /* do */ } } ?> Часто используется вместо статики лишь для того, чтобы инициировать какое-то состояние при создании объекта. Его можно модифицировать, чтобы использовать статику и не плодить переменные: Код (PHP): <?php class Singleton { // Singletone static $instance; private static function getInstance() { if (empty(self::$instance)) { self::$instance = new self; } return self::$instance; } private function __construct() { $this -> msg = 'Preved!'; } private function __clone() {} // Static methods public static function getMsg() { return self::getInstance() -> msg; } } ?> Наглухо заперев сам объект, можно использовать статику, при этом инициировать какое-то состояние при первом использовании. Как идея?
Sergey89 Я забыл getInstance сделать приватным методом. По-идее, должны все закрываться. Только статические открытые.
Тогда это будет банально статический класс. А то что внутри заперт какой-то объект, который и нафиг там нужен непонятно, это уже деталь реализации.
В чём его смысл? В предварительной инициализации? Её можно вынести в статический метод init() и в каждом методе вызывать его вместо getInstance()
А еще можно использовать __set, __get, тоже через статические функции. Это конечно можно реализовать в статике, но зачем, если все уже реализовано? А еще можно делать сериализацию.
Как я понял из первого поста смысл сего — использовать статический класс вместо объектов, но при этом иметь что-то вроде конструктора для начальной инициализации. Если так, то вышеприведённое решение хоть как-то и напоминает адаптер по своей реализации, не имеет к нему никакого отношения по типу решаемой задачи. И зачем в таком случае нужен внутренний объект так же не ясно.
vasa_c Объект персонажа в игре харнится в сериализованом виде. Вот такой штукой удобно его десереализовать и сразу использовать + не создавать лишние переменные в разных методах и функциях, т.к. статика доступна везде.