Введение: зачем вообще это ваше ООП?
Если ты только начинаешь путь программиста, то, скорее всего, уже слышал загадочные слова: ООП, классы, объекты, инкапсуляция, наследование… В этот момент многие новички испытывают лёгкую панику и желание вернуться к echo "Hello, world";.
Спокойно. Ты не один. ООП — это не магия и не заговор сеньоров. Это всего лишь способ думать о программе, чтобы:
код был понятнее;
код было легче расширять;
код было не стыдно показать другим (и себе через полгода).
Сегодня мы разберём ООП от и до, простым человеческим языком, с примерами на PHP, с шутками и жизненными аналогиями.
Что такое ООП простыми словами
ООП (объектно-ориентированное программирование) — это подход, при котором программа состоит из объектов, которые:
имеют данные (состояние);
умеют что‑то делать (поведение);
общаются друг с другом.
Аналогия из жизни (без неё никак)
Представь, что ты играешь в RPG.
Персонаж — это объект
Класс персонажа (воин, маг) — это класс
Здоровье, мана, сила — это свойства
Ударить мечом, кастануть огненный шар — это методы
Примерно так же всё работает и в коде.
Класс — это чертёж
Класс — это описание того, каким должен быть объект.
Класс — как чертёж дома. По одному чертежу можно построить много одинаковых домов.
Пример класса в PHP
class Car {
public string $brand;
public string $color;
public function drive() {
echo "Машина едет";
}
}
Здесь мы описали:
что у машины есть бренд и цвет;
что машина умеет ехать.
Объект — это конкретная вещь
Объект — это экземпляр класса. То есть реальная штука, созданная по чертежу.
$car1 = new Car();
$car1->brand = 'BMW';
$car1->color = 'black';
$car1->drive();
Теперь:
$car1— это конкретная машина;у неё есть бренд BMW;
она умеет ехать (и едет).
Можно создать хоть тысячу машин:
$car2 = new Car();
$car2->brand = 'Toyota';
$car2->color = 'white';
Свойства и методы
Свойства
Свойства — это данные объекта.
public string $brand;
Проще говоря: что объект знает о себе.
Методы
Методы — это действия объекта.
public function drive() {
echo "Машина едет";
}
Проще говоря: что объект умеет делать.
Конструктор: момент рождения объекта
Когда объект создаётся, мы часто хотим сразу задать ему начальные данные.
Для этого есть конструктор.
class Car {
public string $brand;
public string $color;
public function __construct(string $brand, string $color) {
$this->brand = $brand;
$this->color = $color;
}
}
Использование:
$car = new Car('Audi', 'red');
$this— это ссылка на текущий объект. Типа «я сам».
Инкапсуляция: не трогай, сломается
Инкапсуляция — это принцип, который говорит:
Внутренности объекта должны быть скрыты от внешнего мира.
Зачем это нужно?
Чтобы:
объект нельзя было сломать случайно;
данные изменялись только правильным способом.
Модификаторы доступа
В PHP есть три основных:
public— доступно всемprotected— доступно классу и наследникамprivate— доступно только внутри класса
class BankAccount {
private int $balance = 0;
public function deposit(int $amount) {
$this->balance += $amount;
}
public function getBalance(): int {
return $this->balance;
}
}
Теперь нельзя сделать так:
$account->balance = 1000000; // ❌
нельзя
И это хорошо. Банк доволен. Ты доволен. Мир стабилен.
Наследование: не изобретай велосипед
Наследование позволяет создавать новые классы на основе существующих.
class Animal {
public function speak() {
echo "Животное издаёт звук";
}
}
class Dog extends Animal {
public function speak() {
echo "Гав!";
}
}
$dog = new Dog();
$dog->speak(); // Гав!
Собака — это животное, но с уточнениями.
Полиморфизм: один интерфейс — разное поведение
Полиморфизм — это когда разные объекты могут отвечать на один и тот же вызов по‑разному.
class Cat extends Animal {
public function speak() {
echo "Мяу";
}
}
$animals = [new Dog(), new Cat()];
foreach ($animals as $animal) {
$animal->speak();
}
Результат:
Гав!
Мяу
Один метод — разное поведение. Магия? Нет, полиморфизм.
Абстракция: только главное
Абстракция — это когда мы описываем что объект должен делать, но не как именно.
abstract class Shape {
abstract public function getArea(): float;
}
class Square extends Shape {
public function __construct(private float $side) {}
public function getArea(): float {
return $this->side ** 2;
}
}
Абстрактный класс — это как ТЗ от заказчика: «сделай», а как — твоя проблема.
Итог: вся суть ООП в одном месте
ООП держится на четырёх китах:
Инкапсуляция — скрываем лишнее
Наследование — переиспользуем код
Полиморфизм — один интерфейс, разное поведение
Абстракция — работаем с сутью, а не деталями
Если ты понял это — поздравляю, ты понял ООП.
Напоследок
ООП — это не цель, а инструмент. Он не делает код автоматически хорошим, но помогает писать его осознанно.
Если после этой статьи ты:
не боишься слова «класс»;
понимаешь, зачем нужны объекты;
можешь объяснить ООП другу на кухне;
значит, всё получилось.
А если нет — перечитай ещё раз. Программисты так делают постоянно.
Удачи в коде и поменьше фатальных ошибок.
Recommended Comments