Как исправить: Using $this when not in object context

Источник: «Here's the fix to 'using $this when not in object context.'»
Давайте разберёмся почему возникает ошибка 'Using $this when not in object context' и как её исправить.

Чтобы исправить Using $this when not in object context, вы можете сделать статический метод, вызывающий $this, не статическим.

Независимо от того, используете ли вы CodeIgniter, CakePHP, Laravel, Symfony, WordPress, Yii, или что-то ещё, $thisэто переменная, которая ссылается на текущий объект. Поэтому естественно, что вам не разрешено вызывать её из статического метода.

Как исправить Using $this when not in object context, на примере

Возьмите этот код и попробуйте его запустить. Вы увидите снова Using $this when not in object context.

class Foo {
public static function bar() {
// Это плохо, потому что мы находимся в статическом методе.
$this->baz();
}

public function baz() {
}
}

Foo::bar();

Как видите, мы пытаемся вызвать нестатический метод baz() из статического метода.

Как было сказано ранее, нам необходимо:

  1. Удалить ключевое слово static из объявления bar();
  2. Создать экземпляр Foo и вызвать bar() оттуда.
class Foo {
- public static function bar() {
+ public function bar() {
$this->baz();
}

public function baz() {
}
}

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

Вы также можете сделать метод baz() статическим в зависимости от вашего первоначального намерения:

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

- public function baz() {
+ public static function baz() {
}
}

Дополнительные материалы

Предыдущая Статья

Ретроспектива Laravel: что изменилось с версии 5.8

Следующая Статья

Почему async/await больше, чем синтаксический сахар