PHP Обектно ориентирано програмиране (ООП) концепция Урок с пример

Какво е OOPs?

Обектно ориентираният е подход към разработката на софтуер, който моделира приложението около обекти от реалния свят като служители, коли, банкови сметки и т.н. Класът дефинира свойствата и методите на обект от реалния свят. Обектът е поява на клас.

Трите основни компонента на обектната ориентация са;

  • Обектно ориентиран анализ – функционалност на системата
  • Обектно ориентирано проектиране – архитектура на системата
  • Обектно ориентирано програмиране – реализация на приложението

Принципи на обектно ориентираното програмиране

Трите основни принципа на ООП са;

  • Капсулирането – това се отнася до скриване на подробностите за изпълнението и само излагане на методите. Основната цел на капсулирането е да;
  • Намалете сложността на разработката на софтуер – като скриете подробностите за внедряването и изложите само операциите, използването на клас става лесно.
  • Защитете вътрешното състояние на обект – достъпът до променливите на класа е чрез методи като 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“ означава, че променливите не могат да бъдат достъпни директно извън класа (Encapsulation).
  • „публична функция __construct($family…)“ е методът на php конструктора. Тази функция се извиква всеки път, когато е създаден екземпляр на класа. В този случай ние определяме семейството и храната.
  • „обществена функция get…()“ е методът, използван за достъп до семейната или хранителната стойност (капсулиране)
  • „обществен набор от функции…()“ е методът, използван за задаване на семейна или хранителна стойност (капсулиране)

Как да внедрим наследяването в PHP

Ще работим с крава и лъв. И кравата, и лъвът наследяват от класа Животни.

Класовата диаграма по-долу показва връзките.

прилагане на наследяване в PHP

Обърнете внимание, че кравата наследява от класа животни и също дефинира собствена променлива и методи.

Нека сега кодираме класа Крава

<?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 (Наследяване).

Как да създадете обект от класа

Всички класове 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 Сървър, но използвайте същия унифициран интерфейс.

Можем да създадем интерфейс, който дефинира стандартните методи и абстрактен клас, който имплементира общите методи.

  • Interface – подобно е на клас. Той само дефинира методите и параметрите.
  • Абстрактен клас – това е клас, който не може да се използва за директно създаване на обект. Неговата цел е да предостави частични или пълни реализации на общи методи.

Диаграмата на класовете по-долу илюстрира връзката между нашите абстрактен клас, интерфейс и класове за изпълнение.

Наследяване в 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);
?>

Oбобщение

  • Обектно-ориентираното програмиране OOP е мощна техника, която моделира приложения след обекти от реалния свят
  • Класът е представяне на обекти от реалния свят със свойства и методи
  • Трите основни принципа на ООП са;
  • Капсулирането
  • наследяване
  • полиморфизъм