Codeigniter Model Fatal error: Using $this when not in object context
Codeigniter Model Fatal error: Using $this when not in object context
我对某些适用于开发但不适用于生产的代码有一点疑问。这很奇怪,因为所有其他代码都有效(或似乎有效)。
整个错误如下:
Fatal error: Using $this when not in object context in
/[snip]/application/modules/manage_plugins/models/Manage_plugins.php
on line 6 A PHP Error was encountered
Severity: Error
Message: Using $this when not in object context
Filename: models/Manage_plugins.php
Line Number: 6
Backtrace:
从我能找到的其他类似问题来看,这是由于人们试图在静态上下文中使用“$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");
有人知道为什么会这样吗?
感谢 rexmarc,我能够解决这个问题,并通过 use
-ing 匿名对象 $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 - Anonymous functions may use $this, as well as be declared statically
来源:http://php.net/manual/en/functions.anonymous.php
由于 PHP 开发 (5.5) 和生产 (5.3) 版本不同,此问题未引起注意。
另请参阅:
我对某些适用于开发但不适用于生产的代码有一点疑问。这很奇怪,因为所有其他代码都有效(或似乎有效)。
整个错误如下:
Fatal error: Using $this when not in object context in /[snip]/application/modules/manage_plugins/models/Manage_plugins.php on line 6 A PHP Error was encountered
Severity: Error
Message: Using $this when not in object context
Filename: models/Manage_plugins.php
Line Number: 6
Backtrace:
从我能找到的其他类似问题来看,这是由于人们试图在静态上下文中使用“$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");
有人知道为什么会这样吗?
感谢 rexmarc,我能够解决这个问题,并通过 use
-ing 匿名对象 $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 - Anonymous functions may use $this, as well as be declared statically
来源:http://php.net/manual/en/functions.anonymous.php
由于 PHP 开发 (5.5) 和生产 (5.3) 版本不同,此问题未引起注意。
另请参阅: