php – динамическое обновление значения Singleton class

Это следующий вопрос к этому вопросу

Если я объявлю это как одноэлементный класс:

// Server.php class Server { private $stopper; private static $instance; public static getInstance() { if(!isset(self::$Server)) self::$Server = new static(); return self::$Server; } public function setStopper() { $this->stopper = TRUE; } public function startServer() { $self = $this; $consumer = new Consumer(); $consumer->onConsume(function($data) use($self, $consumer) { // some processing if($self->getStopper()) { // always false $consumer->stop(); $self->stopServer(); } }); $consumer->consume(); } public function stopServer() { ... } } 

И использовал следующий скрипт для запуска сервера:

 // start.php $server = Server::getInstance(); $server->startServer(); 

И следующий сценарий, чтобы установить пробку:

 // stop.php $server = Server::getInstance(); $server->setStopper(); 

Это не работает: пробка все еще ложна (проверено echo )! Кроме того, я попытался использовать сеансы вместо этого.

 // start.php $server = new Server(); session_start(); $_SESSION['server'] = $server; session_write_close(); $server->startServer(); // stop.php session_start(); $server = $_SESSION['server']; $server->setStopper(TRUE); 

Но запуск stop.php вызывает следующую ошибку: Undefined index: server

Спасибо @ Maximus2012 и @Sammitch.

У меня появилась идея из следующего потока из групп Google

https://groups.google.com/d/msg/phirehose-users/dvCZ9EvCNA8/nOiv3m2ByAEJ

Я использовал внешний .txt файл для хранения флага и установки пробки вместо всего этого фиаско;)

Обновить

Я узнал, почему в этом случае невозможно работать с одиночками. Каждый раз, когда вызывается php, для обработки этого запроса создается отдельный процесс (или поток, в зависимости от сервера), т.е. отдельный процесс (или потоки) для start.php и stop.php и они не могут получить доступ к одному синглтону из-за " inter process privacy "!

Но если я запускаю start.php и stop.php как один процесс, он работает, как и ожидалось!