Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fatal Error: Using $this when not in object context

I'm receiving this fatal error message: Using $this when not in object context. This class is setted up as a library in the CodeIgniter.

This is my class:

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);
    }
}

I'm initializing it via autoload.php. The line it is throwing the error at:

file_put_contents( $this->app . $key.'.cache', $value);

Where is my problem?

like image 650
Cyclone Avatar asked May 23 '26 04:05

Cyclone


2 Answers

You can't use $this in a static method. The variable $this is only available to class methods as these receive the object on which the method is called.

That's what "when not in object context" means: there's no object passed to that static method because it's static. A static method is part of the class, not part of the objects that are instantiated using that class.

like image 70
Simeon Visser Avatar answered May 25 '26 16:05

Simeon Visser


$this will not be available in a static function. You'll probably want to re-create $app within the static function:

static function store($key, $value)
{
    $app = base_url('application') . '/cache/';
    $key = sha1($key);
    $value = serialize($value);
    file_put_contents( $app . $key.'.cache', $value);
}

I'm not quite sure what you're trying to do in the grand context of your application, but you may not even need a static method in the first place.

like image 37
rjz Avatar answered May 25 '26 18:05

rjz