PHP错误:间接修改重载属性

时间:2011-02-11 16:43:00

标签: php oop overloading

我正在尝试为(当前)数据库存储构建自己的会话处理程序。当将其作为普通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! 

2 个答案:

答案 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