05. Основы ООП в PHP
Что такое ООП
Объектно-ориентированное программирование (ООП) — это способ писать код, разбивая программу на отдельные логические части — объекты. Каждый объект отвечает за определённую задачу.ООП делает код понятнее, гибче и легче для сопровождения. Вместо огромных процедур мы создаём классы, которые описывают сущности: пользователя, заказ, статью и т.д.
ООП — это как конструктор: из маленьких деталей (классов) вы собираете сложные системы.
Основные понятия
- Класс — шаблон (чертёж), описывающий, как создаются объекты.
- Объект — конкретный экземпляр класса.
- Свойство — переменная, принадлежащая объекту.
- Метод — функция, принадлежащая классу.
Пример класса и объекта
Создадим класс User, который хранит имя пользователя и приветствует его.
<?php
class User {
public $name;public function __construct($name) {
$this->name = $name; // $this — ссылка на текущий объект
}
public function hello() {
echo 'Привет, ' . $this->name . '!';
}
}
$u = new User('Иван'); // создаём объект класса
$u->hello(); // вызываем метод объекта
?>
Вывод: ``` Привет, Иван! ```
Разбор кода
- class User — объявление класса
- public $name — свойство, доступное извне
- __construct() — конструктор, выполняется при создании объекта
- $this->name — обращение к свойству объекта внутри класса
Свойства и методы
Вы можете добавлять в класс сколько угодно свойств и методов. Например:
class Car {
public $brand;
public $speed = 0;public function __construct($brand) {
$this->brand = $brand;
}
public function accelerate($value) {
$this->speed += $value;
echo $this->brand . ' ускоряется до ' . $this->speed . ' км/ч!<br>';
}
}
$bmw = new Car('BMW');
$bmw->accelerate(50);
$bmw->accelerate(30);
Вывод: ``` BMW ускоряется до 50 км/ч! BMW ускоряется до 80 км/ч! ```
Типы доступа
В PHP есть три модификатора доступа:- public — доступен отовсюду
- protected — доступен внутри класса и его наследников
- private — доступен только внутри текущего класса
Пример с private
class BankAccount {
private $balance = 0;public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$acc = new BankAccount();
$acc->deposit(1000);
echo 'Баланс: ' . $acc->getBalance();
Вывод: ``` Баланс: 1000 ```
Здесь свойство $balance нельзя изменить напрямую — только через методы.
this и конструкторы
Ключевое слово $this указывает на текущий объект. Конструктор __construct() выполняется автоматически при создании объекта.
class Book {
public $title;
public $author;public function __construct($title, $author) {
$this->title = $title;
$this->author = $author;
}
public function info() {
echo 'Книга: ' . $this->title . ' (Автор: ' . $this->author . ')';
}
}
$book = new Book('1984', 'Джордж Оруэлл');
$book->info();
Множественные объекты
Класс можно использовать для создания множества объектов:
$u1 = new User('Анна');
$u2 = new User('Максим');$u1->hello(); // Привет, Анна!
$u2->hello(); // Привет, Максим!
Каждый объект хранит своё состояние — имя пользователя.
Статические методы и свойства
Иногда нужно создать общие данные для всех объектов — например, счётчик.
class Counter {
public static $count = 0;public function __construct() {
self::$count++;
}
public static function show() {
echo 'Создано объектов: ' . self::$count . '<br>';
}
}
$a = new Counter();
$b = new Counter();
Counter::show();
Вывод: ``` Создано объектов: 2 ```
Практика: мини-программа «Зоопарк»
Попробуем применить ООП на практике.
<?php
class Animal {
public $name;
public $sound;public function __construct($name, $sound) {
$this->name = $name;
$this->sound = $sound;
}
public function speak() {
echo $this->name . ' говорит: ' . $this->sound . '<br>';
}
}
$cat = new Animal('Кошка', 'Мяу');
$dog = new Animal('Собака', 'Гав');
$parrot = new Animal('Попугай', 'Привет!');
$cat->speak();
$dog->speak();
$parrot->speak();
?>
Вывод: ``` Кошка говорит: Мяу Собака говорит: Гав Попугай говорит: Привет! ```
Итоги урока
Теперь вы знаете:- Что такое классы, объекты, свойства и методы
- Как работает конструктор и $this
- Как использовать модификаторы доступа (public, private, protected)
- Как создавать несколько экземпляров класса
- Как применять статические свойства и методы