【问题标题】:PHP error: Indirect modification of overloaded propertyPHP错误:间接修改重载属性
【发布时间】: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


【解决方案1】:

在更改__get返回的数组的上下文中,错误“间接修改重载属性”是众所周知的。

因此我可以想象read 必须通过引用返回:

public function &read(...) {
    ...
}

但是鉴于整个互联网上都没有提到这一点,我认为故障出在不同的地方。可能在您的一些“不相关”代码中。

【讨论】:

  • 嗯,实际上会话类中的所有其他方法都在那里,但是是空的,现在什么都不做。我已尝试根据您的示例进行相应更改,并且现在也抛出Notice: Only variable references should be returned by reference :(
  • @Industrial:这很可能是问题所在。 PHP 期望这些方法做一些事情。如果 all 只返回 null 显然不行……你应该先实现所有方法,然后去调试
  • 我早先这样做了,然后将它们清空,没有任何区别。然而,我在谷歌搜索后发现了session_write_close(); 的问题,并在我的脚本中添加了这个函数作为最后一个函数后——一切正常。呜呜! (这里有信息php.net/manual/en/function.session-write-close.php
【解决方案2】:

www.anindya.com在“Fixed curl extensions:”下下载*php_curl-5.4.3-VC9-x64.zip*并替换ext文件夹中的php_curl.dll。

发现相关问题:http://forum.wampserver.com/read.php?2,85716,printview,page=1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多