首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中单例类的多个实例

问PHP中单例类的多个实例
EN

Stack Overflow用户
提问于 2012-01-20 13:46:27
回答 1查看 1.7K关注 0票数 2

我在PHP中有以下单例类。

代码语言:javascript
复制
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;
    }

}

但在课堂上,当我这样做的时候

代码语言:javascript
复制
CounterBalance::getInstance()->getCounterBalanceValue();

在同一个php页面上,它可以正常工作。但是它不能跨页面正常工作。当我在随后的php页面中执行相同的函数调用时,我得到了多个CounterBalance实例。

谁能解释一下为什么会发生这种情况。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-20 13:49:55

欢迎来到HTTP的无状态世界。

单例只能用于单个页面加载(或任何其他PHP数据结构,就这一点而言)。当php进程终止时,单例进程也随之终止。下一次加载页面时,将重新创建单例。单例只在单个进程的上下文中是活动的。如果您试图在单个脚本执行期间创建它的10个实例,则需要维护单个实例。

如果您需要跨页面的数据持久性,则必须实现状态代理。例如,$_SESSION或$_GET超级全局变量或将数据存储在数据库中(例如),并在随后的页面加载时重新检索数据。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8937245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档