Учебное пособие по концепции объектно-ориентированного программирования (ООП) PHP с примером
Что такое ООП?
Объектно-ориентированный подход к разработке программного обеспечения, который моделирует приложение на основе объектов реального мира, таких как сотрудники, автомобили, банковские счета и т. д. Класс определяет свойства и методы объекта реального мира. Объект — это появление класса.
Три основных компонента объектной ориентации:
- Объектно-ориентированный анализ – функциональность системы
- Объектно-ориентированное проектирование – архитектура системы
- Объектно-ориентированное программирование – реализация приложения
Принципы объектно-ориентированного программирования
Три основных принципа ООП:
- Инкапсуляция – речь идет о сокрытии деталей реализации и раскрытии только методов. Основная цель инкапсуляции:
- Уменьшите сложность разработки программного обеспечения: скрывая детали реализации и раскрывая только операции, использование классов становится проще.
- Защитите внутреннее состояние объекта — доступ к переменным класса осуществляется с помощью таких методов, как get и set, что делает класс гибким и простым в обслуживании.
- Внутреннюю реализацию класса можно изменить, не беспокоясь о нарушении кода, использующего этот класс.
- наследование – это касается отношений между классами. Отношения принимают форму родителя и ребенка. Дочерний элемент использует методы, определенные в родительском классе. Основная цель наследования;
- Возможность повторного использования – несколько дочерних элементов могут наследовать от одного и того же родителя. Это очень полезно, когда нам нужно предоставить общие функции, такие как добавление, обновление и удаление данных из базы данных.
- Полиморфизм – речь идет о наличии единой формы, но множества различных способов реализации. Основная цель полиморфизма:
- Упростите обслуживание приложений и сделайте их более расширяемыми.
ООП Concepts в PHP
PHP — объектно-ориентированный язык сценариев; он поддерживает все вышеперечисленные принципы. Вышеуказанные принципы достигаются посредством;
- Инкапсуляция – с помощью методов «get» и «set» и т. д.
- наследование – с помощью ключевого слова Extensions
- Полиморфизм – с помощью ключевого слова «орудия»
Теперь, когда у нас есть базовые знания ООП и того, как оно поддерживается в PHP, рассмотрим примеры, реализующие изложенные выше принципы
Что такое УМЛ?
Унифицированный язык моделирования UML — это метод, используемый для проектирования и документирования объектно-ориентированных систем.
UML создает ряд документов, но мы рассмотрим диаграмму классов, которая очень важна для объектно-ориентированного программирования PHP.
Пример диаграммы классов
Ключ диаграммы классов
- The Верхний ящик содержит имя класса
- The средняя коробка содержит переменные класса
- The нижняя коробка содержит методы класса
- The минус (-) знак означает частная область
- The плюс (+) знак означает публичную сферу
- The хэш (#) знак означает защищенную область
Как создать класс в PHP
Ключевое слово class используется для определения класса в 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» означает, что к переменным нельзя получить прямой доступ вне класса (инкапсуляция).
- «публичная функция __construct($family…)» — это метод конструктора PHP. Эта функция вызывается всякий раз, когда создается экземпляр класса. В данном случае мы ставим семью и еду.
- «публичная функция get…()» — это метод, используемый для доступа к значению семьи или еды (инкапсуляция).
- «public function set…()» — это метод, используемый для установки семейной или пищевой ценности (инкапсуляция).
Как реализовать наследование в 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» заставляет корову и льва использовать методы из класса Animal (наследование).
Как создать объект класса
Для простоты классы 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(); ?>
Тестирование нашего приложения
Давайте теперь просмотрим наше приложение в веб-браузере.
Фантастическое право! Давайте теперь посмотрим на третий принцип ООП — полиморфизм.
Допустим, мы хотим разработать приложение, которое подключается к различным механизмам баз данных, таким как MySQL и SQL Сервер, но используйте тот же единый интерфейс.
Мы можем создать интерфейс, определяющий стандартные методы, и абстрактный класс, реализующий общие методы.
- Интерфейс – это похоже на класс. Он определяет только методы и параметры.
- Абстрактный класс – это класс, который нельзя использовать для создания объекта напрямую. Его цель — предоставить частичную или полную реализацию общих методов.
Диаграмма классов ниже иллюстрирует взаимосвязь между нашим абстрактным классом, классами интерфейса и реализации.
Давайте теперь создадим наш абстрактный класс
<?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…» — переменные класса, общие для всех реализаций.
- «функция __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. MySQLДрайвер.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); ?>
Резюме
- Объектно-ориентированное программирование ООП — это мощная технология, которая моделирует приложения по образцу объектов реального мира.
- Класс — это представление объектов реального мира со свойствами и методами.
- Три основных принципа ООП:
- Инкапсуляция
- наследование
- Полиморфизм