Классы и объекты в PHP

Классы и объекты в PHP: объявление класса, свойства, методы, создание объекта через new, обращение через $this.

Класс — это шаблон для создания объектов. Объект — конкретный экземпляр класса с собственными данными. Класс описывает, какими свойствами и поведением обладает объект.

Объявление класса

Класс описывается ключевым словом class. Внутри объявляют свойства (переменные) и методы (функции):

<?php
class Cat {
    public string $name;
    public string $color;

    public function speak(): void {
        echo "{$this->name} говорит: Мяу!\n";
    }
}

Ключевое слово $this — это ссылка на текущий объект. Через $this->name мы обращаемся к свойству конкретного экземпляра.

Создание объекта

Объект создаётся оператором new. Каждый объект независим — у каждого свои данные:

<?php
$cat1 = new Cat();
$cat1->name = "Барсик";
$cat1->color = "рыжий";

$cat2 = new Cat();
$cat2->name = "Мурка";
$cat2->color = "серая";

$cat1->speak(); // Барсик говорит: Мяу!
$cat2->speak(); // Мурка говорит: Мяу!

Вывод:

Барсик говорит: Мяу!
Мурка говорит: Мяу!

Конструктор

Конструктор — специальный метод __construct(), который автоматически вызывается при создании объекта через new. Удобно задавать начальные значения сразу:

<?php
class Cat {
    public string $name;
    public int $age;

    public function __construct(string $name, int $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function info(): string {
        return "{$this->name}, возраст: {$this->age} лет";
    }
}

$cat = new Cat("Барсик", 3);
echo $cat->info();

Вывод:

Барсик, возраст: 3 лет

Продвинутый синтаксис PHP 8: constructor promotion

В PHP 8 можно объявить и заполнить свойства прямо в параметрах конструктора, добавив модификатор доступа:

<?php
class Cat {
    public function __construct(
        public string $name,
        public int $age,
    ) {}

    public function info(): string {
        return "{$this->name}, возраст: {$this->age} лет";
    }
}

$cat = new Cat("Мурка", 5);
echo $cat->info(); // Вывод: Мурка, возраст: 5 лет

Код стал вдвое короче — и полностью эквивалентен предыдущему примеру.

Методы класса

Методы — это функции, привязанные к классу. Они могут принимать параметры и возвращать значения, как обычные функции:

<?php
class Calculator {
    private float $result = 0;

    public function add(float $value): static {
        $this->result += $value;
        return $this; // возвращаем сам объект для цепочки вызовов
    }

    public function subtract(float $value): static {
        $this->result -= $value;
        return $this;
    }

    public function getResult(): float {
        return $this->result;
    }
}

$calc = new Calculator();
echo $calc->add(100)->add(50)->subtract(30)->getResult();

Вывод:

120

Коротко

  • Класс — шаблон; объект — конкретный экземпляр, созданный через new ClassName().
  • $this внутри метода — ссылка на текущий объект.
  • __construct() вызывается автоматически при создании объекта.
  • PHP 8 позволяет объявлять свойства прямо в параметрах конструктора (constructor promotion).
  • Методы могут возвращать $this для цепочки вызовов.
Проверьте себя
1. Как обратиться к свойству $name внутри метода класса?
Aself::$name
B$this->name
C$name
Dclass->name
2. Какой метод автоматически вызывается при создании объекта через new?
A__destruct()
B__init()
C__construct()
D__create()
3. Что позволяет сделать constructor promotion в PHP 8?
AВызывать конструктор несколько раз
BОбъявить и инициализировать свойства прямо в параметрах конструктора
CСоздать объект без оператора new
DНаследовать конструктор автоматически

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.

Поддержать проект