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)
  • Как создавать несколько экземпляров класса
  • Как применять статические свойства и методы