我创建了一个类Log
,用于在文件中写入一些内容(这允许我在生产中调试我的应用程序)。现在,此Log
类已包含在名为SingleTon
的{{1}}类中,因此,为了使用Trace
类方法,我只需执行此操作:
Log
这是 Trace::getInstance()->info("Write some content.");
类:
Trace
在<?php
require_once("Log.php");
class Trace
{
private $_trace;
private static $_instance;
private function __construct()
{
$this->_trace = new Log();
}
public static function getInstance()
{
if(!isset(self::$_instance))
{
self::$_instance = new static;
}
return self::$_instance;
}
}
类中我有一个Log
来破坏读写流,如下所示:
destruct
if($this->_handle)
{
fclose($this->_handle);
}
包含:$_handle
。
现在,如果我执行一个这样的调用:Resource id #22
,系统运行良好,文本在文件上正确写入,但是,如果我这样做:
Trace::getInstance()->info("Write some content.");
我收到此错误:
fwrite():22不是有效的流资源
我想到了一个类Trace::getInstance()->info("Write some content.");
Trace::getInstance()->info("Write some content2.");
的实例,它仍然是开放的,所以我尝试了:
Trace
用于销毁每个调用的function __destruct()
{
unset(self::$_instance);
}
实例。但我得到了这个错误:
尝试在...中取消设置静态属性Trace :: $ _ instance
我不知道出了什么问题,有人可以帮我解决一下吗?
更新 - 日志类
对于Log
课程的写作,我这样做:
Log
其中if(fwrite($this->_handle, $mex) === false)
表示像$this->_handle
这样的资源,而stream
是要写的消息。现在我陷入了例外:
$mex
仅在第二次尝试时,第一次尝试我可以在文件上正确写入。在日志文件的破坏中我已经:
if(fwrite($this->_handle, $mex) === false)
{
throw new RuntimeException("Can't write.");
}
如果我使用没有静态实例的public function __destruct()
{
// Close the stream
if($this->_handle)
{
fclose($this->_handle);
}
}
类,我没有问题,例如:
Log
没有错误发生。