0
這是一個後續問題要this questionPHP - 動態更新Singleton類的價值
如果我聲明這是一個單例類:
// 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
ing)!另外我也嘗試過使用會話。
// 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
public function setStopper(){...}中的代碼是什麼樣子的? – Maximus2012 2015-03-31 17:16:07
因爲您在2個不同的文件中調用這些函數,所以變量的範圍可能會丟失。基本上你需要爲兩個完全不同的文件創建2個單獨的類實例。 – Maximus2012 2015-03-31 17:17:34
對不起,我剛剛從我的其他問題複製了代碼。修復! – 2015-03-31 17:17:37