我有一个自定义会话处理程序类,它将会话存储在数据库中。写入数据时,有一些自定义逻辑会根据它是创建新会话还是更新现有会话来处理写入的方式有所不同。为了跟踪这一点,在existingSession
第一次读取会话时设置类属性。
代码(为简洁起见)如下:
class My_Session_SaveHandler implements Zend_Session_SaveHandler_Interface
{
protected $existingSession;
public function read($id)
{
if ($id) {
$this->existingSession = (load existing data from db)
}
return '';
}
public function write($id, $data)
{
if ($this->existingSession) {
[update session]
} else {
[create session]
}
return true;
}
}
这一切似乎都很好。但是我有时会在日志中看到这样的错误:
PHP 注意:未定义的属性:My_Session_SaveHandler::$existingSession in /path/to/My/Session/SaveHandler.php on line xxx,
由于$existingSession
是一个声明的属性,我唯一能想到的就是如果静态调用 write 方法。我可以将变量修改为静态属性,但由于该类似乎工作,我想了解会话处理程序类方法是否总是被静态调用,或者它是否只是有时发生(如果是这样,为什么)。
编辑:通知中的行号是if ($this->existingSession) {
写函数中检查的行。