PHP Singleton:没有持有实例

bal*_*nza 2 php singleton restart

我在vb.net工作多年后才开始潜入php.

我想编写一个logger类,在我的webapp上运行为singleon,这里是代码:

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;
}

}
Run Code Online (Sandbox Code Playgroud)

我期望的是,当我在我的应用程序的页面之间切换,这些页面对cLog :: trace()方法进行多次调用时,数据数组会增加,并且所有跟踪都会填充.但我得到的是:每次我运行一个页面时,$ instance为null所以对象重新启动(如你所见,我在实例getter中放了一个echo"empty!"行:它每次显示)

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

这里有一个用法示例:

cLog::getInstance()->trace("hello world");
$logs = cLog::getInstance()->getData();
Run Code Online (Sandbox Code Playgroud)

谢谢

Bre*_*ker 8

PHP使用"无共享"架构.这意味着(除其他外)页面加载之间没有共享.与.NET不同,应用程序在第一页上启动并运行直到停止,只是在请求到来时为它们提供服务.在PHP中,每次请求页面时,应用程序基本上都是编译并从头开始运行.


ETo*_*reo 5

PHP生命周期从"页面开始加载"到"页面结束加载".

一般来说,每次加载新页面时,一切都从头开始.

您可以使用会话数据做一些有趣的事情,以使您的记录器按照您希望的方式工作.

祝好运!