【问题标题】:Multiple Instances of Singleton Class in PHPPHP中单例类的多个实例
【发布时间】:2012-01-20 05:46:26
【问题描述】:

我在 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 实例。

谁能解释一下为什么会这样。

提前致谢。

【问题讨论】:

    标签: php web-applications singleton


    【解决方案1】:

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

    单例只能持续加载单个页面(或任何其他 PHP 数据结构,就此而言)。当 php 进程终止时,单例也随之终止。下次加载页面时,会重新创建单例。单例仅在该单个进程的上下文中是有效的。如果您尝试在单个脚本执行期间创建它的十个实例,您将维护单个实例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多