致命错误:在不在对象上下文中时使用$ this

时间:2012-04-03 17:16:24

标签: php class codeigniter

我收到此致命错误消息: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);

我的问题在哪里?

3 个答案:

答案 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);
}
相关问题