我正在尝试为(当前)数据库存储构建自己的会话处理程序。当将其作为普通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!
答案 0 :(得分:2)
错误“间接修改重载属性”在更改__get
返回的数组的上下文中是众所周知的。
我可以想象read
必须通过引用返回:
public function &read(...) {
...
}
但是,由于在整个互联网上都没有提到这一事实,我认为错误存在于某个不同的地方。可能在你的一些“无关”代码中。
答案 1 :(得分:0)
转到www.anindya.com下载* php_curl-5.4.3-VC9-x64.zip *下的“Fixed curl extensions:”并替换ext文件夹中的php_curl.dll。
发现相关问题:http://forum.wampserver.com/read.php?2,85716,printview,page=1