【发布时间】:2011-02-11 16:43:00
【问题描述】:
我正在尝试为(当前)数据库存储构建自己的会话处理程序。在第一个示例中将其作为普通 OOP 调用时,一切都按预期工作。数据存储到数据库中没有任何问题。
但是,当将它与session_set_save_handler 函数放在一起以便能够使用$_SESSION 全局变量时,
PHP 变得前所未有的疯狂,并开始输出多个Notice: Indirect modification of overloaded property 错误。
我做错了什么导致这些可怕的错误?
工作代码示例:
class session extends sessionBase {
private $db;
function __construct() {
parent::__construct();
$this->db = database::get()->connection();
}
function write() {
// Query to database
}
}
$session = new session;
session->write(); // Writes to database perfectly
非工作代码示例:
class session extends sessionBase {
private $db;
function __construct() {
parent::__construct();
$this->db = database::get()->connection();
}
function write() {
// Query to database
}
}
$sessions = New session();
session_set_save_handler(
array($sessions,"open"),
array($sessions,"close"),
array($sessions,"read"),
array($sessions,"write"),
array($sessions,"destroy"),
array($sessions,"gc")
);
session_start(); // This is bananas! B-A-N-A-N-A-S!
【问题讨论】:
-
会话类是否定义了函数open、close、read、destroy和gc?它似乎没有,但我认为您可能只是为了简洁而将它们排除在列表之外 - 如果它们实际上不存在,那将是一个问题。
-
嗨瑞恩。我正要写一个说明,我已经省略了 “不相关” 函数,这些函数是使会话工作以使我的示例更易于阅读所必需的......
-
错误可能出在您不相关的代码中,可能与会话无关;)
-
@nikic : 未设置
session_set_save_handler时不会出现...
标签: php oop overloading