[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: singleton часть 2
Guest
Доброй ночи, кто не спит.
Прошу подсказать ответ на вопрос. Имеется singleton банальный для пример код

class singleton {
private static $instance;
public $some_property = 123;
private function __construct() {}
public function start() {
if(!isset(self::$instance)) self::$instance = new singleton;
return self::$instance;
}
public function msg_print() {
echo $this->some_property;
}
}

$obj = singleton::start();
$obj->some_property = 'HELLO WORLD';
$obj->msg_print();


И предположим, имеется еще два простых класса 1к и 2к, в которых вызывается наш singleton
Если я в 1к укажу $obj->some_property = 'HELLO WORLD';
И затем вызову в 2k $obj->msg_print();
Какое должно быть значение 'HELLO WORLD' или 123 ?
у меня почему-то получается вывести лишь 123 , может это вообще не реально? т.е. нужно использовать статические методы?



Спустя 5 часов, 48 минут, 5 секунд (8.08.2012 - 08:42) T1grOK написал(а):
Видимо, где то косячите. Данный код вполне рабочий.
Это правда у вас не совсем синглтон. Я могу спокойно склонировать и получить еще один экземпляр класса.

Спустя 54 минуты, 37 секунд (8.08.2012 - 09:37) Guest написал(а):
да я понимаю, клон нужно закрыть

Спустя 1 час, 39 минут, 26 секунд (8.08.2012 - 11:16) TMake написал(а):
не туда

Спустя 1 минута (8.08.2012 - 11:17) Guest написал(а):
не туда?

Спустя 16 минут, 3 секунды (8.08.2012 - 11:33) TMake написал(а):
В виде примера:
 class Singleton {
protected static $instance;
private $_qwe = '123';

private function __construct()
{

}


public static function getInstance(){
if(is_null(self::$instance))
self::$instance = new Singleton;

return self::$instance;
}
public function qwe($q = false){
if($q)
$this->_qwe = $q;
echo $this->_qwe;
}
}

Singleton::getInstance()->qwe(); // 123
Singleton::getInstance()->qwe('qwe'); // qwe
$obj = Singleton::getInstance();
$obj->qwe(); // qwe
$obj->qwe('ok'); // ok
Singleton::getInstance()->qwe(); // ok
Singleton::getInstance()->qwe('qwe'); // qwe
$obj->qwe(); // qwe

Спустя 6 минут, 33 секунды (8.08.2012 - 11:40) T1grOK написал(а):
stepan - Ровным счетом написал то же, что и автор!

Спустя 6 минут, 5 секунд (8.08.2012 - 11:46) TMake написал(а):
Цитата (T1grOK @ 8.08.2012 - 13:40)
Ровным счетом написал то же, что и автор!

 class Singleton {
protected static $instance;
private $_qwe = '123';

private function __construct()
{

}


public static function &getInstance(){
if(!is_object(self::$instance))
self::$instance = new self;

return self::$instance;
}
public function qwe($q = false){
if($q)
$this->_qwe = $q;
echo $this->_qwe;
}
}

Singleton::getInstance()->qwe(); // 123
Singleton::getInstance()->qwe('qwe'); // qwe
$obj =& Singleton::getInstance();
$obj->qwe(); // qwe
$obj->qwe('ok'); // ok
Singleton::getInstance()->qwe(); // ok
Singleton::getInstance()->qwe('qwe'); // qwe
$obj->qwe(); // qwe

Спустя 1 минута, 19 секунд (8.08.2012 - 11:47) TMake написал(а):
T1grOK если считаешь что должно быть по другому - твой вариант в студию.

Спустя 5 минут, 21 секунда (8.08.2012 - 11:53) T1grOK написал(а):
Что первый вариант, что второй правильный с точки зрения функциональных возможностей, не вижу смысла делать третий точно такой же вариант, только с другими переменными.
stepan - отличия твоего варианта лишь в том, что обращение к свойствам производится посредством метода, и инстанс дергается через другой метод.

Автор покажите полностью код, который в итоге возвращает 123.

Спустя 6 минут, 40 секунд (8.08.2012 - 11:59) TMake написал(а):
Делал заметку для себя в блоге, ТС если есть желание, там есть описание как на Yii сделано. http://php-md5.blogspot.com/2012/08/singleton.html

Спустя 11 минут, 3 секунды (8.08.2012 - 12:10) Guest написал(а):
public function __clone()
{
trigger_error('Клонирование запрещено.', E_USER_ERROR);
}

public function __wakeup()
{
trigger_error('Десериализация запрещена.', E_USER_ERROR);
}

Спустя 1 минута, 46 секунд (8.08.2012 - 12:12) Guest написал(а):
нет , я разобрался, при обращении к синглтону поновой данные обновлялись, что препятствовало норм работе, спасибо за помощь
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.