Опубликовано:
Как исправить: 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()
из статического метода.
Как было сказано ранее, нам необходимо:
- Удалить ключевое слово
static
из объявленияbar()
; - Создать экземпляр
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() {
}
}