Here's the fix to "using $this when not in object context."

Here's the fix to "using $this when not in object context."

Modified
Dec 14, 2022
Written by
Benjamin Crozat
0
comments
2 minutes
read

Introduction

To fix “Using $this when not in object context”, you can make the static method that is calling $this non-static.

No matter if you’re using CodeIgniter, CakePHP, Laravel, Symfony, WordPress, Yii, or anything else, $this is a variable that refers to the current object. Therefore, it’s natural to not being allowed to call it from a static method.

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

Take this code and try to run it. You will see “Using $this when not in object context” again.

class Foo {
    public static function bar() {
        // This is bad because we are in a static method.
        $this->baz();
    }
    
    public function baz() {
    }
}

Foo::bar();

As you can see, we are trying to call baz(), which is a non-static method, from a static method.

As mentioned above, we need to:

  1. Remove the static keyword from bar()’s declaration;
  2. Create an instance of Foo and call bar() from there.
class Foo {
    public function bar() {
        $this->baz();
    }
    
    public function baz() {
    }
}

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

You could also make the baz method static depending on your initial intention:

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

Hi! I’m from the South of France and I’ve been a self-taught web developer since 2006. When I started learning PHP and JavaScript, PHP 4 was still widely used, Internet Explorer 6 ruled the world, and we used DHTML to add falling snow on websites.

Being able to educate myself for free on the web changed my life for the better. Giving back to the community was a natural direction in my career and I truly enjoy it.

Therefore, I decided to take action:

  1. I launched this blog in September 2022 with the goal to be in everyone’s Google search. I get more than tens of thousands of monthly clicks from it and even more visits overall (my analytics dashboard is public by the way).
  2. I also started growing my X (formerly Twitter) account at the same time, which has now over 7,000 followers.
  3. All the content I write is free thanks to my sponsors.

I also want to be completely free with my time and make a living with my own products. In April 2024, I launched Nobinge, a tool to summarize and chat with your content, including YouTube videos.

Believe me, I’m just getting started!

0 comments

You need to be signed in to comment this post.
Sign in with GitHub