Классы — это фундаментальный элемент объектно-ориентированного программирования (ООП) в PHP. Они позволяют структурировать код, инкапсулировать данные и функциональность, а также строить масштабируемые и поддерживаемые приложения. В этой статье мы подробно рассмотрим, что такое классы в PHP, как они работают и как их правильно использовать.

Что такое класс?

**Класс** — это шаблон (или "чертёж") для создания объектов. Он определяет свойства (данные) и методы (функции), которые будут характерны для объектов этого типа.

Пример аналогии: если представить класс как чертёж автомобиля, то объект — это конкретный автомобиль, построенный по этому чертежу.

Базовая структура класса в PHP

PHP:
<?php
class Car {
    // Свойства (переменные класса)
    public $brand;
    public $color;

    // Методы (функции класса)
    public function startEngine() {
        return "Двигатель заведён!";
    }
}

- **`class`** — ключевое слово для объявления класса.
- **Свойства** — переменные внутри класса (часто называют *атрибутами* или *полями*).
- **Методы** — функции внутри класса.

Создание объекта (экземпляра класса)

Объект создаётся с помощью оператора `new`:

PHP:
$myCar = new Car();
$myCar->brand = "Toyota";
$myCar->color = "Красный";

echo $myCar->startEngine(); // Выведет: Двигатель заведён!

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

Конструктор и деструктор

### Конструктор (`__construct`)

Конструктор — это специальный метод, который автоматически вызывается при создании объекта. Используется для инициализации свойств.

PHP:
class Car {
    public $brand;
    public $color;

    public function __construct($brand, $color) {
        $this->brand = $brand;
        $this->color = $color;
    }

    public function getInfo() {
        return "Машина: {$this->brand}, цвет: {$this->color}";
    }
}

$myCar = new Car("BMW", "Синий");
echo $myCar->getInfo(); // Машина: BMW, цвет: Синий

- `$this` — ссылка на текущий объект внутри класса.

Деструктор (`__destruct`)

Деструктор вызывается автоматически, когда объект удаляется из памяти (например, при завершении скрипта):

PHP:
public function __destruct() {
    echo "Объект {$this->brand} удалён.";
}

Уровни доступа (модификаторы видимости)

PHP поддерживает три уровня доступа:
МодификаторОписание
`public`Доступен отовсюду
`protected`Доступен только внутри класса и его наследников
`private`Доступен только внутри самого класса

Пример:
PHP:
class BankAccount {
    private $balance = 0;

    public function deposit($amount) {
        if ($amount > 0) {
            $this->balance += $amount;
        }
    }

    public function getBalance() {
        return $this->balance;
    }
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // 100
// echo $account->balance; // Ошибка! balance — приватное свойство

Наследование

Наследование позволяет одному классу (дочернему) унаследовать свойства и методы другого (родительского).

PHP:
class Vehicle {
    protected $speed = 0;

    public function accelerate($speed) {
        $this->speed += $speed;
    }
}

class Car extends Vehicle {
    public function honk() {
        return "Би-би!";
    }
}

$myCar = new Car();
$myCar->accelerate(50);
echo $myCar->honk(); // Би-би!

- Ключевое слово `extends` используется для наследования.
- Дочерний класс может переопределять методы родителя (см. `parent::methodName()` для вызова родительской версии).

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

Статические элементы принадлежат **классу**, а не объекту. Их можно вызывать без создания экземпляра.

PHP:
class MathUtils {
    public static function square($x) {
        return $x * $x;
    }
}

echo MathUtils::square(5); // 25

- Обращение к статическим методам: `Класс::метод()`.
- Статические свойства объявляются с `static`.

> ⚠️ В статических методах **нельзя** использовать `$this`.

Абстрактные классы и интерфейсы

Абстрактные классы


Абстрактный класс не может быть инстанцирован напрямую. Он предназначен для наследования и может содержать как обычные, так и абстрактные методы (без реализации).

Код:
abstract class Animal {
    abstract public function makeSound();

    public function sleep() {
        return "Спит...";
    }
}

class Dog extends Animal {
    public function makeSound() {
        return "Гав!";
    }
}

Интерфейсы

Интерфейс — это контракт, определяющий, какие методы должен реализовать класс.

PHP:
interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
    file_put_contents('log.txt', $message . PHP_EOL, FILE_APPEND);
    }
}

- Класс может реализовать **несколько интерфейсов** (`implements Interface1, Interface2`).
- Интерфейсы не содержат реализации методов (до PHP 8.0).

Магические методы

PHP предоставляет «магические» методы, которые автоматически вызываются в определённых ситуациях:

- `__construct()` — при создании объекта
- `__destruct()` — при уничтожении объекта
- `__toString()` — при приведении объекта к строке
- `__get()`, `__set()` — при доступе к несуществующим или недоступным свойствам
- и другие...

Пример `__toString()`:

PHP:
class Person {
    public $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function __toString() {
        return "Имя: {$this->name}";
    }
}

$person = new Person("Анна");
echo $person; // Имя: Анна

Singleton и другие паттерны

Классы позволяют реализовывать популярные шаблоны проектирования. Например, **Singleton** гарантирует, что у класса есть только один экземпляр:

PHP:
class Database {
    private static $instance = null;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    // Запрет клонирования
    private function __clone() {}
    private function __wakeup() {}
}

Заключение

Классы в PHP — это мощный инструмент для организации кода, повышения его читаемости, повторного использования и поддержки. Благодаря ООП вы можете:

- Изолировать логику в отдельные модули.
- Легко расширять функциональность через наследование.
- Обеспечивать безопасность данных через инкапсуляцию.
- Следовать принципам SOLID и другим best practices.

Начните с простых классов, постепенно осваивайте наследование, интерфейсы и паттерны проектирования — и вы сможете писать профессиональный, масштабируемый код на PHP.

> 💡 **Совет**: всегда следите за принципом **инкапсуляции** — делайте свойства `private` или `protected`, а доступ к ним предоставляйте через публичные методы (геттеры и сеттеры).

*Статья актуальна для PHP 8.x (на момент написания: январь 2026 г.).*
  • Like
Реакции: admin