我在PHP中有以下单例类。
class CounterBalance{
private static $instance;
private $counterBalance;
private function __construct(){
$this->counterBalance = mt_rand(1, 4);
}
// Getter method for creating/returning the single instance of this class
public final static function getInstance() {
if(!self::$instance) {
self::$instance = new CounterBalance();
echo "CounterBalance constructed <br/>";
}
return self::$instance;
}
public function getCounterBalanceValue() {
return $this->counterBalance;
}
}但在课堂上,当我这样做的时候
CounterBalance::getInstance()->getCounterBalanceValue();在同一个php页面上,它可以正常工作。但是它不能跨页面正常工作。当我在随后的php页面中执行相同的函数调用时,我得到了多个CounterBalance实例。
谁能解释一下为什么会发生这种情况。
提前谢谢。
发布于 2012-01-20 13:49:55
欢迎来到HTTP的无状态世界。
单例只能用于单个页面加载(或任何其他PHP数据结构,就这一点而言)。当php进程终止时,单例进程也随之终止。下一次加载页面时,将重新创建单例。单例只在单个进程的上下文中是活动的。如果您试图在单个脚本执行期间创建它的10个实例,则需要维护单个实例。
如果您需要跨页面的数据持久性,则必须实现状态代理。例如,$_SESSION或$_GET超级全局变量或将数据存储在数据库中(例如),并在随后的页面加载时重新检索数据。
https://stackoverflow.com/questions/8937245
复制相似问题