Benjamin Crozat “Heard about Sevalla? They let you deploy PHP apps with ease.” Claim $50 →

Fix "using $this when not in object context" now

3 minutes read

Fix "using $this when not in object context" now

Introduction

To fix “Using $this when not in object context”, simply avoid calling $this from a static context. $this always refers to the current object instance, so it’s meaningless outside of object instances.

Whether you’re using CodeIgniter, CakePHP, Laravel, Symfony, WordPress, Yii, or anything else, the logic behind this error remains the same. Let’s see exactly why this happens and how to solve it easily.

Why PHP throws “Using $this when not in object context”

PHP throws this error because $this is reserved for referencing the current object instance. Static methods, anonymous functions, or code executed globally (outside of a class context) don’t have an object instance to reference. Therefore, $this simply doesn’t exist in these contexts, and PHP rightfully complains.

How to fix “Using $this when not in object context”

Here’s an example that triggers the error:

class Foo {
    public static function bar() {
        // Error: $this is invalid here.
        $this->baz();
    }

    public function baz() {
    }
}

Foo::bar();

We’re calling the non-static method baz() from a static method bar() using $this. PHP won’t allow this.

Solution 1: Make your method non-static and instantiate the object

The best way to solve this error is usually to remove the static keyword, instantiate the class, and then call your method from an object instance:

class Foo {
    public function bar() {
        $this->baz();
    }

    public function baz() {
    }
}

$foo = new Foo;
$foo->bar();

Solution 2: Make the called method static

If you intended your methods to remain static, change your non-static method to static and use self:: or static:: instead of $this:

class Foo {
    public static function bar() {
        static::baz();
    }

    public static function baz() {
    }
}

Foo::bar();

Solution 3: Avoid $this outside of class context

If you see this error outside a class (e.g., a standalone script), simply remove $this. It only belongs inside an object-oriented context:

// This triggers an error:
echo $this->value;

// Simply remove $this:
$value = "Hello";
echo $value;

Solution 4: Binding $this correctly in closures

Anonymous functions (closures) lose the $this context unless explicitly bound. Here’s how to fix this:

class Foo {
    public $value = "Hello";

    public function bar() {
        $fn = function () {
            echo $this->value;
        };

        // Bind closure to current object instance.
        $fn = $fn->bindTo($this);
        $fn();
    }
}

$foo = new Foo;
$foo->bar();

Quick tip: self:: vs. static::

Use self:: to reference static methods or properties defined in the current class explicitly. Use static:: for late static binding, which allows referencing methods or properties that may be overridden by child classes.

Conclusion

You now know exactly why and how “Using $this when not in object context” happens and how to fix it efficiently. Remember to keep your object contexts clear, and PHP will happily play along.

For further reading, check the official PHP manual on static methods.

Happy coding!


Did you like this article? Then, keep learning:

0 comments

Guest

Great deals for developers

Check all deals →