我收到此致命错误消息:Using $this when not in object context.
此类在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_put_contents( $this->app . $key.'.cache', $value);
我的问题在哪里?
答案 0 :(得分:5)
您不能在静态方法中使用$this
。变量$this
仅适用于类方法,因为它们接收调用该方法的对象。
这就是“当不在对象上下文中时”意味着:没有对象传递给该静态方法,因为它是静态的。静态方法是类的一部分,而不是使用该类实例化的对象的一部分。
答案 1 :(得分:3)
$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);
}
我不太确定您在应用程序的宏大环境中尝试做什么,但您可能首先不需要static
方法。
答案 2 :(得分:1)
说实话,store
函数应该是一个实例函数(删除static
关键字),否则在其中使用$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);
}