gpt4 book ai didi

php - PHP 中的 Singleton 类的新实例用于每个 HTTP 请求

转载 作者:行者123 更新时间:2023-12-02 06:08:48 25 4
gpt4 key购买 nike

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

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

提前致谢。

最佳答案

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

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

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

关于php - PHP 中的 Singleton 类的新实例用于每个 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com