类似于上面的斯巴达克答案,但可能更简单。
帮助文件中的一个类,具有一个静态属性和两个读取和写入该静态属性的实例方法。无论您创建多少个实例,它们都会写入单个静态属性。
在您的一个自定义帮助文件中创建一个类。还要创建一个返回该类实例的函数。该类定义了一个静态变量和两个实例方法,一个是读取数据,一个是写入数据。我这样做是因为我希望能够从控制器、模型、库、库模型中收集日志数据,并收集所有日志数据以一次性发送到浏览器。我不想写入日志文件,也不想在会话中保存东西。我只是想收集在我的 ajax 调用期间服务器上发生的事情的数组,并将该数组返回给浏览器进行处理。
在帮助文件中:
if (!class_exists('TTILogClass')){
class TTILogClass{
public static $logData = array();
function TTILogClass(){
}
public function __call($method, $args){
if (isset($this->$method)) {
$func = $this->$method;
return call_user_func_array($func, $args);
}
}
//write to static $logData
public function write($text=''){
//check if $text is an array!
if(is_array($text)){
foreach($text as $item){
self::$logData[] = $item;
}
} else {
self::$logData[] = $text;
}
}
//read from static $logData
public function read(){
return self::$logData;
}
}// end class
} //end if
//an "entry" point for other code to get instance of the class above
if(! function_exists('TTILog')){
function TTILog(){
return new TTILogClass();
}
}
在任何控制器中,您可能希望输出由控制器或由控制器调用的库方法或由控制器调用的模型函数生成的所有日志条目:
function testLogging(){
$location = $this->file . __FUNCTION__;
$message = 'Logging from ' . $location;
//calling a helper function which returns
//instance of a class called "TTILogClass" in the helper file
$TTILog = TTILog();
//the instance method write() appends $message contents
//to the TTILog class's static $logData array
$TTILog->write($message);
// Test model logging as well.The model function has the same two lines above,
//to create an instance of the helper class TTILog
//and write some data to its static $logData array
$this->Tests_model->testLogging();
//Same thing with a library method call
$this->customLibrary->testLogging();
//now output our log data array. Amazing! It all prints out!
print_r($TTILog->read());
}
打印出来:
从控制器名称记录:testLogging
从模型名称记录:testLogging
从 customLibrary 记录:testLogging