Загрузка...

Принципы ООП в PHP

php

Введение

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

В этой статье мы рассмотрим четыре принципа ООП с примерами, диаграммами классов и таблицей модификаторов доступа.


Модификаторы доступа в PHP

Модификаторы доступа управляют видимостью свойств и методов класса.

Модификатор Видимость
public Доступен везде: внутри класса, в наследниках и извне.
protected Доступен только внутри класса и его наследников.
private Доступен только внутри класса, в котором объявлен.

Пример:

class Example {
    public string $publicProp = "Доступно везде";
    protected string $protectedProp = "Доступно в классе и наследниках";
    private string $privateProp = "Доступно только в классе";
}

1. Абстракция

Абстракция выделяет только значимые характеристики объекта, скрывая реализацию.

Пример:

interface PaymentGateway {
    public function pay(float $amount): bool;
}

class PayPalGateway implements PaymentGateway {
    public function pay(float $amount): bool {
        echo "Оплата {$amount} через PayPal\n";
        return true;
    }
}

class StripeGateway implements PaymentGateway {
    public function pay(float $amount): bool {
        echo "Оплата {$amount} через Stripe\n";
        return true;
    }
}

Диаграмма классов:

+------------------+       +------------------+       +------------------+
| PaymentGateway   |<------| PayPalGateway    |       | StripeGateway    |
|------------------|       |------------------|       |------------------|
| + pay(amount)    |       | + pay(amount)    |       | + pay(amount)    |
+------------------+       +------------------+       +------------------+

2. Инкапсуляция

Инкапсуляция защищает данные и ограничивает доступ к ним.

Пример:

class BankAccount {
    private float $balance = 0;

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

    public function withdraw(float $amount): void {
        if ($amount > 0 && $amount <= $this->balance) {
            $this->balance -= $amount;
        }
    }

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

Диаграмма классов:

+------------------+
| BankAccount      |
|------------------|
| - balance: float |
|------------------|
| + deposit(amount)|
| + withdraw(amount)|
| + getBalance():float |
+------------------+

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

Наследование позволяет создавать новые классы на основе существующих.

Пример:

class Vehicle {
    public function move(): void {
        echo "Транспорт движется\n";
    }
}

class Car extends Vehicle {
    public function honk(): void {
        echo "Сигнал автомобиля\n";
    }
}

Диаграмма классов:

+-----------+
| Vehicle   |
|-----------|
| + move()  |
+-----------+
     ^
     |
+-----------+
| Car       |
|-----------|
| + honk()  |
+-----------+

4. Полиморфизм

Полиморфизм позволяет объектам с одинаковым интерфейсом вести себя по-разному.

Пример:

abstract class Shape {
    abstract public function getArea(): float;
}

class Circle extends Shape {
    public function __construct(private float $radius) {}
    public function getArea(): float {
        return pi() * pow($this->radius, 2);
    }
}

class Rectangle extends Shape {
    public function __construct(private float $width, private float $height) {}
    public function getArea(): float {
        return $this->width * $this->height;
    }
}

Диаграмма классов:

+-----------+
| Shape     |
|-----------|
| + getArea() : float |
+-----------+
     ^                  ^
     |                  |
+-----------+     +-------------+
| Circle    |     | Rectangle   |
|-----------|     |-------------|
| + getArea()|     | + getArea() |
+-----------+     +-------------+

Заключение

4 принципа ООП в PHP — это основа написания чистого, масштабируемого и поддерживаемого кода.

Резюме:

  • Абстракция — скрытие реализации
  • Инкапсуляция — защита данных
  • Наследование — переиспользование кода
  • Полиморфизм — разные реализации одного интерфейса

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *