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)
谢谢
PHP使用"无共享"架构.这意味着(除其他外)页面加载之间没有共享.与.NET不同,应用程序在第一页上启动并运行直到停止,只是在请求到来时为它们提供服务.在PHP中,每次请求页面时,应用程序基本上都是编译并从头开始运行.
PHP生命周期从"页面开始加载"到"页面结束加载".
一般来说,每次加载新页面时,一切都从头开始.
您可以使用会话数据做一些有趣的事情,以使您的记录器按照您希望的方式工作.
祝好运!