【问题标题】:PHP storing refernece in object property (Cannot assign by reference to overloaded object)PHP在对象属性中存储引用(不能通过引用分配给重载对象)
【发布时间】:2014-09-19 05:55:32
【问题描述】:

所以我一直在尝试让 IRC 机器人与 PHP 一起在本地运行。但是,我希望它能够从站点检索信息,并定期发布此信息。所以我安装了 pthreads 来做到这一点。但是,我在引用变量时遇到了一些麻烦。

这是我在尝试将机器人连接到频道时遇到的错误。

致命错误:无法通过引用 C:\Apache24\htdo 中的重载对象进行分配 cs\muhbot.php 第 128 行

这是它给我一个错误的代码。第 128 行是 __construct() 函数的最后一行。

class recheck extends Thread {
    var $lastCheck,$bot;
    public function __construct(&$bot){
        $this->lastCheck = microtime(true);
        $this->bot = &$bot;
    }

$bot 是管理 IRC 连接的类对象。该类是由该类中的一个函数创建的。

function startCheck()
{
    $ReChecker = new recheck($this);
    $ReChecker->start();
}

我正在尝试将主类作为参考传递,但不断收到来自上面的致命错误。为什么我会收到此错误,我该如何修复/解决它?

【问题讨论】:

    标签: php resources object-properties


    【解决方案1】:

    您传递给 recheck 构造函数的$this 是对当前对象的引用,并通过引用 (Are PHP5 objects passed by reference?) 传递。

    摆脱你所有的&,它应该可以按预期工作

       public function __construct($bot){
        $this->lastCheck = microtime(true);
        $this->bot = $bot;
      }
    

    【讨论】:

    • 这实际上是我首先尝试的,然后将其称为参考。但是稍后,当我尝试访问连接时,我又遇到了另一个错误。 “PHP 警告:fputs() 期望参数 1 是资源,在第 92 行的 C:\Apache24\htdocs\muhbot.php 中给出的整数”。出于某种原因,它将类属性读取为整数,而不是资源。
    • 函数fputs() 写入资源句柄(如文件),它期望将其作为第一个参数,而不是对象。您的fputs 错误与对象引用无关——您不应该将其传递给对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2016-10-09
    • 2020-10-12
    相关资源
    最近更新 更多