Php 致命错误:不在对象上下文中使用$this
我收到此致命错误消息:Php 致命错误:不在对象上下文中使用$this,php,class,codeigniter,Php,Class,Codeigniter,我收到此致命错误消息:在不在对象上下文中时使用$this。 该类在CodeIgniter中设置为库 这是我的班级: class My_class { function __construct() { $this->app = base_url('application') . '/cache/'; if ($this->expire_after == '') {
在不在对象上下文中时使用$this。
该类在CodeIgniter中设置为库
这是我的班级:
class My_class {
function __construct()
{
$this->app = base_url('application') . '/cache/';
if ($this->expire_after == '')
{
$this->expire_after = 300;
}
}
static function store($key, $value)
{
$key = sha1($key);
$value = serialize($value);
file_put_contents( $this->app . $key.'.cache', $value);
}
}
我正在通过autoload.php
初始化它。
它抛出错误的行:
file\u put\u内容($this->app.key.'.cache',$value)代码>
我的问题在哪里?您不能在静态方法中使用$this
。变量$this
仅对类方法可用,因为它们接收调用方法的对象
这就是“不在对象上下文中时”的意思:没有对象传递给该静态方法,因为它是静态的。静态方法是类的一部分,而不是使用该类实例化的对象的一部分。$此
在静态函数中不可用。您可能需要在静态函数中重新创建$app
:
static function store($key, $value)
{
$app = base_url('application') . '/cache/';
$key = sha1($key);
$value = serialize($value);
file_put_contents( $app . $key.'.cache', $value);
}
我不太确定您在应用程序的大环境中要做什么,但您可能根本不需要静态方法。老实说,存储
函数应该是一个实例函数(删除静态
关键字),否则在其中使用$this
将不知道它所指的是什么对象
或者,您可以让对象将引用传递给它们自己,以便静态函数知道要对哪个对象执行操作:static function store($obj,$key,$value)[…]$obj->app[…]
或者,只需传入$obj->app
的内容即可,因为静态函数只需要该部分信息,而不需要访问整个对象:
static function store($app, $key, $value)
{
$key = sha1($key);
$value = serialize($value);
file_put_contents( $app . $key.'.cache', $value);
}
您在静态函数中使用了$this
,您不能这样做。我不知道您为什么要使用静态方法!我只在实用程序类中使用它们:)