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

Що таке ООП?

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

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

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

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

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

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

ООП Concepts у PHP

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

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

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

Що таке UML?

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

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

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

ООП Concepts у PHP

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

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

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

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

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

Скажімо, ми хочемо створити клас для представлення тварин.

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

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

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

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

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

<?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. Ця функція викликається щоразу, коли створюється екземпляр класу. У цьому випадку ми налаштовуємо сім'ю і їжу.
  • «публічна функція отримати…()» — це метод, який використовується для доступу до цінності сім’ї або їжі (інкапсуляція)
  • «Набір загальнодоступних функцій…()» — це метод, який використовується для встановлення сімейної чи харчової цінності (інкапсуляція)

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

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

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

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

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

Давайте тепер закодуємо клас 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);
    }
}
?>

ТУТ,

  • «class … extends Animal» змушує корову та лева використовувати методи з класу Animal (Inheritance).

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

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

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

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

<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow  = new Cow('Herbivore', 'Grass');
$lion = new Lion('Canirval', '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

Правильно фантастично! Давайте тепер розглянемо третій принцип ООП, поліморфізм.

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

Ми можемо створити інтерфейс, який визначає стандартні методи, і абстрактний клас, який реалізує загальні методи.

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

Діаграма класів нижче ілюструє взаємозв’язок між нашими абстрактними класами, інтерфейсами та класами реалізації.

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

Давайте тепер створимо наш абстрактний клас

<?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;
    }
}
?>

ТУТ,

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

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

<?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); ?>

Or

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

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

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

Підсумки

  • Об’єктно-орієнтоване програмування ООП — це потужна техніка, яка моделює програми за об’єктами реального світу
  • Клас — це представлення об’єктів реального світу з властивостями та методами
  • Три основні принципи ООП:
  • Інкапсуляція
  • Спадкування
  • Поліморфізм