我在PHP中有以下Singleton类。
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实例。
任何人都可以解释为什么会发生这种情况。
提前致谢。
答案 0 :(得分:6)
单例只能持久保存单页加载(或任何其他PHP数据结构)。当php进程死掉时,单例就会死掉。下次加载页面时,将再次创建单例。单身人士只在该单一过程的背景下存活。如果您在单个脚本执行期间尝试创建它的十个实例,则可以维护单个实例。
如果您需要跨页面的数据持久性,则必须实现状态代理。例如,$_SESSION
或$_GET
超全局或在数据库中存储数据(例如),并在后续页面加载时重新检索它。