Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:不在对象上下文中使用$this_Php_Class_Codeigniter - Fatal编程技术网

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
,您不能这样做。我不知道您为什么要使用静态方法!我只在实用程序类中使用它们:)