gpt4 book ai didi

PHP 单例 : not holding instance

转载 作者:行者123 更新时间:2023-12-02 11:41:24 24 4
gpt4 key购买 nike

在 vb.net 工作多年后,我刚刚开始深入研究 php。

我想编写一个记录器类,在我的网络应用程序上作为单例运行,代码如下:

class cLog{

private $data = NULL;


static private $instance = NULL;

static public function getInstance(){
if(self::$instance == NULL){
echo "empty!";
self::$instance = new cLog();
}
return self::$instance;
}


private function __construct(){
}
private function __clone(){
}



public function getData(){
return self::getInstance()->data;
}

public function trace($o){
self::getInstance()->data[] = $o;
}

}

我期望的是,当我在多次调用 cLog::trace() 方法的应用程序页面之间切换时,数据数组会增加并充满所有跟踪。但我得到的是:每次我运行一个页面时,$instance 都是 null,因此对象会重新启动(如您所见,我在实例 getter 中放置了一条 echo“empty!”行:它每次都会显示)

我想我在 php 应用程序生命周期中有一些误解......

这里有一个使用示例:

cLog::getInstance()->trace("hello world");
$logs = cLog::getInstance()->getData();

谢谢

最佳答案

PHP 使用“无共享”架构。这意味着(除其他外)页面加载之间不会共享任何内容。与 .NET 不同,在 .NET 中,应用程序在访问第一个页面时启动并运行直至停止,仅在请求到来时提供服务。在 PHP 中,每次请求页面时,应用程序实际上都会从头开始编译和运行。

关于PHP 单例 : not holding instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2285603/

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