Когда мы пишем обычный метод:
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++;
}
}
Тут нет объекта. Есть общее состояние класса.
Почему так сделано?
Потому что ООП разделяет:
- Поведение экземпляра
- Поведение класса как типа
Если бы в статике был $this, это ломало бы саму модель — у тебя был бы “призрачный объект”, которого не существует.
Итого
$thisсуществует только когда существует объект.- static метод вызывается без создания объекта.
- Нет объекта — нет
$this. - static — для логики, не зависящей от состояния конкретного экземпляра.