OOP: do not use $this in static
Glossary overview

OOP: do not use $this in static

Когда мы пишем обычный метод:

class User {
    public string $name;

    public function sayHello() {
        return "Hi, I'm " . $this->name;
    }
}

Этот метод принадлежит конкретному объекту.
Ты создаёшь экземпляр:

$user = new User();
$user->name = "Alex";
$user->sayHello();

Вот тут появляется магия $this.

$this – это ссылка на конкретный экземпляр класса, который сейчас вызывает метод.
Это не класс. Это именно объект в памяти.

Теперь представь, что у тебя 100 объектов User. У каждого свой $this.
Поэтому внутри нестатического метода PHP знает: “Окей, работаем с этим конкретным объектом”.

Static

class MathHelper {
    public static function sum($a, $b) {
        return $a + $b;
    }
}

MathHelper::sum(2, 3);

Обрати внимание — ты не создавал объект.

Нет $object = new MathHelper().

Метод вызывается на уровне класса, а не объекта.

И вот тут главный момент:

👉 Статический метод не связан ни с каким экземпляром.
👉 У него нет объекта.
👉 Значит, нет и $this.

$this – это «этот объект».
Но если объекта нет — на что ссылаться?

Статические свойства self::variable

Статический метод:

  • не имеет $this
  • не может обращаться к нестатическим свойствам
  • может обращаться только к статическим свойствам через self::
class Counter {
    public static int $count = 0;

    public static function increment() {
        self::$count++;
    }
}

Тут нет объекта. Есть общее состояние класса.

Почему так сделано?

Потому что ООП разделяет:

  1. Поведение экземпляра
  2. Поведение класса как типа

Если бы в статике был $this, это ломало бы саму модель — у тебя был бы “призрачный объект”, которого не существует.

Итого

  • $this существует только когда существует объект.
  • static метод вызывается без создания объекта.
  • Нет объекта — нет $this.
  • static — для логики, не зависящей от состояния конкретного экземпляра.