Духовность™
Продвинутый новичок
static VS singleton
Рушу догмы, возникшие и оставшиеся в моей голове на этапе освоения ООП, приходится сталкиваться с противоречиями и, казалось бы, тривиальными вопросами.
Представьте объект Http_Request, в принципе простую обёртку над $_REQUEST. Данный класс у меня изначально был Singelton-ом, ибо в приложении всегда должен быть только один объект Request, что, думаю, справедливо.
Так же Singelton у меня Http_Response, Session и др..
Сейчас подумал следующее: фактически, одиночку я использую для того, что бы иметь хранилище данных, гарантирующее, что данные всегда будут лежать в одном месте, в одном массиве. И всё. Сам объект одиночки не хранит никаких состояний в оперативной памяти. Фактически, вместо одиночки можно использовать статические свойства:
т.е. разница стирается между
и
данное "открытие" привело меня в тупик.
Если мы, например, будет реализовывать регистр, аналог GLOBALS, то что нам лучше подайдет - одиночка или класс со статическими свойствами?
Рушу догмы, возникшие и оставшиеся в моей голове на этапе освоения ООП, приходится сталкиваться с противоречиями и, казалось бы, тривиальными вопросами.
Представьте объект Http_Request, в принципе простую обёртку над $_REQUEST. Данный класс у меня изначально был Singelton-ом, ибо в приложении всегда должен быть только один объект Request, что, думаю, справедливо.
Так же Singelton у меня Http_Response, Session и др..
Сейчас подумал следующее: фактически, одиночку я использую для того, что бы иметь хранилище данных, гарантирующее, что данные всегда будут лежать в одном месте, в одном массиве. И всё. Сам объект одиночки не хранит никаких состояний в оперативной памяти. Фактически, вместо одиночки можно использовать статические свойства:
PHP:
class static_class
{
protected static $data = array();
public function __get($key)
{
return isset(self::$data[$key]) ? self::$data[$key] : null;
}
public function __set($key, $value)
{
self::$data[$key] = $value;
}
}
$my = new static_class();
$my->var = 111;
$my2 = new static_class();
echo $my2->var; // 111
$my2->var = 'foo';
echo $my->var; // foo
PHP:
Http_Request::getInstance()->var
PHP:
$obj = new static_class();
$obj->var;
Если мы, например, будет реализовывать регистр, аналог GLOBALS, то что нам лучше подайдет - одиночка или класс со статическими свойствами?
