【问题标题】:Codeigniter Model Fatal error: Using $this when not in object contextCodeigniter 模型致命错误:不在对象上下文中使用 $this
【发布时间】:2016-07-11 23:53:38
【问题描述】:

我对一些适用于开发但不适用于生产的代码有一点问题。这很奇怪,因为所有其他代码都有效(或似乎有效)。

整个错误如下:

致命错误:当不在对象上下文中时使用 $this /[snip]/application/modules/manage_plugins/models/Manage_plugins.php 在第 6 行遇到 PHP 错误

严重性:错误

消息:不在对象上下文中使用 $this

文件名:models/Manage_plugins.php

行号:6

回溯:

从我能找到的其他类似问题来看,这是由于人们试图在静态上下文中使用“$this” - 我不认为对我来说是这种情况。

这里是 manage_plugins 构造函数,第 6 行(错误行)是构造函数中的第一行:

class Manage_plugins extends CI_Model {

    public function __construct() {
        $this->mediator->attach("manage_load", function($name, $data) { $this->on_manage_load(); });

        $this->load->model("automediator");
    }

}

它由以下代码加载(并且从未显式调用):

$CI =& get_instance();

$CI->load->model("manage_plugins/manage_plugins");

有人知道为什么会这样吗?

【问题讨论】:

标签: php codeigniter mediator codeigniter-hmvc


【解决方案1】:

感谢 rexmarc,我能够通过 use-在匿名函数中复制对象 $this 来解决该问题并在 PHP 5.3 上制作类似的结构。

我更改了以下内容:

class Manage_plugins extends CI_Model {
    public function __construct() {
        $this->mediator->attach("manage_load", function($name, $data) { $this->on_manage_load(); });

        $this->load->model("automediator");
    }

}

进入:

class Manage_plugins extends CI_Model {
    public function __construct() {
        $me =& $this;
        $this->mediator->attach("manage_load", function($name, $data) use($me) { $me->on_manage_load(); });

        $this->load->model("automediator");
    }

}

对此的另一种解决方案可能是:

class Manage_plugins extends CI_Model {
    public function __construct() {
        $this->mediator->attach("manage_load", [$this, 'on_manage_load']);

        $this->load->model("automediator");
    }

}

之所以出现此问题,是因为在 5.4 之前的 PHP 版本中,$this 在匿名函数中不可用。

5.4.0 - 匿名函数可以使用 $this,也可以静态声明

来源:http://php.net/manual/en/functions.anonymous.php

由于开发 (5.5) 和生产 (5.3) 的 PHP 版本不同,该问题未被注意到。

另见:https://stackoverflow.com/a/19432335/3649573

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2011-01-21
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多