Концепція об'єктно-орієнтованого програмування (ООП) на PHP з прикладом

⚡ Розумний підсумок

Об'єктно-орієнтоване програмування на PHP моделює застосунок навколо реальних об'єктів, використовуючи класи та об'єкти. У цьому посібнику пояснюються принципи інкапсуляції, успадкування та поліморфізму в ООП, як PHP їх підтримує, а також крок за кроком створюються приклади робочих класів, успадкування та інтерфейсів.

  • 🧱 Класи та об'єкти: Клас визначає властивості та методи реального об'єкта, а об'єкт є єдиним екземпляром цього класу.
  • 🔒 Інкапсуляція: Приватні змінні з публічними методами get та set приховують внутрішні деталі та захищають стан об'єкта.
  • 👪 успадкування: Ключове слово extends дозволяє дочірньому класу повторно використовувати методи батьківського класу, зменшуючи дублювання коду.
  • 🔁 Поліморфізм: Інтерфейс визначає стандартні методи, які багато класів реалізують по-різному, за однією уніфікованою основою.tract.
  • 📐 Діаграма класів UML: Діаграма класів показує ім'я класу, змінні та методи, де плюс, мінус та хеш позначають публічну, приватну та захищену області видимості.
  • 🧩 Інтерфейси та Abstract: ПресtracКлас t використовує спільний код, тоді як інтерфейс гарантує, що кожен клас драйвера надає однакові методи.
  • 🤖 AI Assist: Інструменти штучного інтелекту можуть генерувати PHP-клас з опису та рефакторувати процедурний код у чистий об'єктно-орієнтований код.

Об'єктно-орієнтоване програмування на PHP

Що таке ООП?

Об'єктно-орієнтоване програмування — це підхід до розробки програмного забезпечення, який моделює застосунок навколо реальних об'єктів, таких як співробітники, автомобілі та банківські рахунки. Клас визначає властивості та методи реального об'єкта. Об'єкт є екземпляром класу.

Три основні компоненти орієнтації на об'єкт:

  • Об'єктно-орієнтований аналіз – функціональність системи
  • Об'єктно-орієнтоване проектування – архітектура системи
  • Об’єктно-орієнтоване програмування – реалізація програми

Принципи об'єктно-орієнтованого програмування

Три основні принципи ООП:

  • Інкапсуляція – це стосується приховування деталей реалізації та розкриття лише методів. Основні цілі інкапсуляції полягають у наступному:
    • Зменште складність розробки програмного забезпечення – приховуючи деталі реалізації та відкриваючи лише операції, використання класу стає легким.
    • Захист внутрішнього стану об'єкта – доступ до змінних класу здійснюється через такі методи, як get та set. Це робить клас гнучким та простим у підтримці.
    • Дозволити змінювати внутрішню реалізацію класу, не турбуючись про порушення коду, який використовує цей клас.
  • Спадкування – це стосується зв'язку між класами. Зв'язок має форму батьківського та дочірнього класів. Дочірній клас використовує методи, визначені в батьківському класі. Основна мета успадкування:
    • Повторне використання – кілька дочірніх об'єктів можуть успадковувати від одного батьківського. Це дуже корисно, коли нам потрібно забезпечити спільну функціональність, таку як додавання, оновлення та видалення даних з бази даних.
  • Поліморфізм – це стосується наявності єдиного інтерфейсу з багатьма різними реалізаціями. Головною метою поліморфізму є:
    • Спростити обслуговування програм та зробити їх більш розширюваними.

ООП Concepts у PHP

PHP — це об'єктно-орієнтована мова сценаріїв; вона підтримує всі вищезазначені принципи. Вищезазначені принципи досягаються за допомогою:

  • Інкапсуляція – за допомогою методів «get» та «set», а також модифікаторів доступу.
  • Спадкування – за допомогою ключового слова extends
  • Поліморфізм – за допомогою ключового слова implements

Тепер ми маємо базові знання про ООП і про те, як він підтримується PHP, давайте розглянемо приклади, які реалізують вищезазначені принципи.

Що таке UML?

Уніфікована мова моделювання (UML) – це метод, що використовується для проектування та документування об'єктно-орієнтованих систем.

UML створює низку документів, але ми розглянемо діаграму класів, яка дуже важлива для об'єктно-орієнтованого програмування на PHP.

Приклад діаграми класів

ООП Concepts у PHP

Ключ діаграми класу

  • Команда верхня коробка містить назву класу
  • Команда середня коробка містить змінні класу
  • Команда нижня коробка містить методи класу
  • Команда мінус (-) знак означає приватну область видимості
  • Команда плюс (+) знак означає громадський розмах
  • Команда хеш (#) знак означає захищену область

Як створити клас у PHP

Ключове слово class використовується для визначення класу в PHP. Нижче наведено правила створення класу в PHP.

  • Назва класу повинна починатися з літери
  • Ім’я класу не може бути зарезервованим словом PHP
  • Назва класу не може містити пробіли

Припустимо, що ми хочемо створити клас для представлення тварин. Ми почнемо з визначення ознак, спільних для всіх тварин.

  • Усі тварини належать до родини, такої як травоїдні, хижаки тощо.
  • Усі тварини харчуються їжею

На діаграмі нижче показано діаграму класів для тварини.

Створіть клас у PHP

Давайте тепер напишемо код для нашого класу Animal.

<?php
class Animal
{
    private $family;
    private $food;
    public function __construct($family, $food)
    {
        $this->family = $family;
        $this->food = $food;
    }
    public function get_family()
    {
        return $this->family;
    }
    public function set_family($family)
    {
        $this->family = $family;
    }
    public function get_food()
    {
        return $this->food;
    }
    public function set_food($food)
    {
        $this->food = $food;
    }
}
?>

ТУТ,

  • «private $family, $food» означає, що до змінних не можна отримати доступ безпосередньо поза межами класу (інкапсуляція).
  • «public function __construct($family…)» – це метод-конструктор PHP. Ця функція викликається щоразу, коли створюється екземпляр класу. У цьому випадку ми встановлюємо family та food.
  • «Публічна функція get…()» – це метод, що використовується для доступу до значення родини або їжі (інкапсуляція)
  • «public function set…()» – це метод, що використовується для встановлення значення родини або їжі (інкапсуляція)

Як реалізувати спадкування в PHP

Ми будемо працювати з коровою і левом. І корова, і лев успадковують клас тварин.

Наведена нижче діаграма класів показує зв’язки.

реалізувати успадкування в PHP

Зверніть увагу, що корова успадковує від класу Animal та також визначає власну змінну та методи.

Давайте тепер напишемо код класу Cow.

<?php
class Cow extends Animal
{
    private $owner;
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
    public function set_owner($owner)
    {
        $this->owner = $owner;
    }
    public function get_owner()
    {
        return $this->owner;
    }
}
?>

Давайте тепер напишемо код для класу Lion.

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

ТУТ,

  • «клас … розширює Animal» змушує класи Cow та Lion використовувати методи з класу Animal (спадкування).

Як створити об'єкт класу

Класи Animal, Cow і Lion мають бути в одному каталозі заради простоти.

Давайте тепер створимо застосунок, який використовуватиме наші класи.

Приклад класу PHP

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow = new Cow('Herbivore', 'Grass');
$lion = new Lion('Carnivore', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>

Тестуємо наш додаток

Давайте тепер переглянемо наш застосунок у веббраузері.

Спадкування в PHP

Обидва об'єкти повторно використовують методи get_family та get_food, успадковані від класу Animal, що демонструє успадкування в дії.

Як реалізувати поліморфізм у PHP

Припустимо, ми хочемо розробити застосунок, який підключається до різних систем баз даних, таких як MySQL та SQL Сервер, але використовує той самий уніфікований інтерфейс. Ми можемо створити інтерфейс, який визначає стандартні методи та абсtract-клас, який реалізує загальні методи.

  • інтерфейс – схоже на клас. Він лише визначає методи та параметри.
  • Abstracт-клас – це клас, який не можна використовувати для безпосереднього створення об’єкта. Його метою є надання часткової або повної реалізації звичайних методів.

Наведена нижче діаграма класів ілюструє взаємозв'язок між нашими м'язами пресуtract-клас, інтерфейс та класи реалізації.

Спадкування в PHP

Давайте тепер сформуємо наш пресtracт-клас.

<?php
abstract class DBCommonMethods
{
    private $host;
    private $db;
    private $uid;
    private $password;
    public function __construct($host, $db, $uid, $password)
    {
        $this->host = $host;
        $this->db = $db;
        $this->uid = $uid;
        $this->password = $password;
    }
}
?>

ТУТ,

  • пресtrac«t-клас» означає, що клас не можна використовувати безпосередньо для створення об'єкта
  • «$host, $db…» – це змінні класу, спільні для всіх реалізацій
  • «function __construct(…)» – це метод конструктора класу, який встановлює значення спільних змінних під час ініціалізації

Давайте тепер створимо інтерфейс, який містить стандартні методи, що будуть реалізовані по-різному залежно від рушія бази даних.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

ТУТ,

  • «Інтерфейс» — це ключове слово для створення інтерфейсів
  • «публічна функція…(…)» — це стандартні методи, які мають бути реалізовані

Давайте тепер створимо конкретні класи, які розширять клас DBCommonMethods та реалізують інтерфейс DBInterface. По-перше, MySQLDriver.php:

<?php
class MySQLDriver extends DBCommonMethods implements DBInterface
{
    public function __construct($host, $db, $uid, $password)
    {
        parent::__construct($host, $db, $uid, $password);
    }
    public function db_connect() { /* connect code goes here */ }
    public function delete($where) { /* delete code goes here */ }
    public function insert($data)  { /* insert code goes here */ }
    public function read($where)   { /* read code goes here */ }
    public function update($where) { /* update code goes here */ }
}
?>

Потім, MSSQLServerDriver.php:

<?php
class MSSQLServerDriver extends DBCommonMethods implements DBInterface
{
    public function __construct($host, $db, $uid, $password)
    {
        parent::__construct($host, $db, $uid, $password);
    }
    public function db_connect() { /* connect code goes here */ }
    public function delete($where) { /* delete code goes here */ }
    public function insert($data)  { /* insert code goes here */ }
    public function read($where)   { /* read code goes here */ }
    public function update($where) { /* update code goes here */ }
}
?>

ТУТ,

  • «клас … розширює DBCommonMethods» використовує методи з DBCommonMethods
  • «… реалізує DBInterface» гарантує, що клас надає стандартні методи незалежно від використовуваного драйвера бази даних.

Код, що використовує вищезазначені класи, виглядатиме так:

<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>

Або:

<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>

Решта коду буде однаковою для обох драйверів, наприклад:

<?php
$db->db_connect();
$db->insert($data);
?>

Це поліморфізм у дії: ті самі виклики методів працюють з будь-яким драйвером, який реалізує інтерфейс, тому навколишній код ніколи не змінюється при перемиканні рушіїв баз даних.

Поширені запитання

ПресtracКлас t може містити як реалізовані методи, так і властивості, а клас розширює лише один. Інтерфейс оголошує лише сигнатури методів, а клас може реалізувати багато з них. Використовуйте abstract-клас для спільного використання коду, інтерфейс для забезпечення конфіденційностіtract.

Чотири стовпи - це інкапсуляція, успадкування, поліморфізм та abstracція. Цей посібник зосереджений на перших трьох; пресtracція приховує складні деталі за простим інтерфейсом, який PHP підтримує за допомогою ABS.tract-класи та інтерфейси.

Публічні члени доступні будь-де, приватні члени — лише всередині одного класу, а захищені члени — всередині класу та його підкласів. Вони забезпечують інкапсуляцію, контролюючи, хто може читати або змінювати кожну властивість чи метод.

Так. Дайте штучному інтелекту поля або визначення таблиці, і він зможе створити клас із типізованими властивостями, конструктором та методами get та set. RevПерегляньте типи та додайте валідацію перед використанням класу.

Так. Вставте процедурний скрипт, і ШІ зможе групувати пов'язані функції та дані в класи, застосовувати інкапсуляцію та пропонувати успадкування або інтерфейси. Перевірте рефакторований код, оскільки поведінка має залишитися ідентичною.

Підсумуйте цей пост за допомогою: