Классы и объекты в 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для цепочки вызовов.
Закрепите практикой
Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.