Koncept PHP objektově orientovaného programování (OOPs) Výukový program s příkladem

Co je OOPs?

Objektově orientovaný je přístup k vývoji softwaru, který modeluje aplikaci kolem objektů reálného světa, jako jsou zaměstnanci, auta, bankovní účty atd. Třída definuje vlastnosti a metody objektu reálného světa. Objekt je výskyt třídy.

Tři základní složky objektové orientace jsou;

  • Objektově orientovaná analýza – funkčnost systému
  • Objektově orientované projektování – architektura systému
  • Objektově orientované programování – implementace aplikace

Principy objektově orientovaného programování

Tři hlavní principy OOP jsou;

  • Zapouzdření – jedná se o skrytí detailů implementace a pouze odhalení metod. Hlavním účelem zapouzdření je;
  • Snižte složitost vývoje softwaru – skrytím implementačních detailů a odhalením pouze operací se používání třídy stává snadným.
  • Chraňte vnitřní stav objektu – přístup k proměnným třídy je prostřednictvím metod jako get a set, díky čemuž je třída flexibilní a snadno se udržuje.
  • Interní implementaci třídy lze změnit bez obav z porušení kódu, který třídu používá.
  • Dědictví – to se týká vztahu mezi třídami. Vztah má podobu rodiče a dítěte. Dítě používá metody definované v nadřazené třídě. Hlavním účelem dědictví je;
  • Opětovná použitelnost – několik dětí může zdědit od stejného rodiče. To je velmi užitečné, když musíme zajistit běžné funkce, jako je přidávání, aktualizace a mazání dat z databáze.
  • Polymorfismus – jedná se o jednotnou formu, ale o mnoho různých způsobů provádění. Hlavním účelem polymorfismu je;
  • Zjednodušte údržbu aplikací a udělejte je rozšiřitelnější.

OOP Concepts v PHP

PHP je objektově orientovaný skriptovací jazyk; podporuje všechny výše uvedené principy. Výše uvedených principů je dosaženo prostřednictvím;

  • Zapouzdření – pomocí metod „get“ a „set“ atd.
  • Dědictví – pomocí klíčového slova extends
  • Polymorfismus – pomocí klíčového slova nástroje

Nyní, když máme základní znalosti o OOP a o tom, jak je podporován PHP, podívejme se na příklady, které implementují výše uvedené principy

Co je UML?

Unified Modeling Language UML je technika používaná k navrhování a dokumentaci objektově orientovaných systémů.

UML vytváří řadu dokumentů, ale my se podíváme na diagram tříd, který je velmi důležitý pro objektově orientované php programování.

Příklad diagramu tříd

OOP Concepts v PHP

Klíč diagramu třídy

  • Jedno Horní krabice obsahuje název třídy
  • Jedno střední krabice obsahuje proměnné třídy
  • Jedno spodní schránka obsahuje metody třídy
  • Jedno mínus (-) znamení znamená soukromý rozsah
  • Jedno více (+) znak znamená veřejný prostor
  • Jedno hash (#) značka znamená chráněný rozsah

Jak vytvořit třídu v PHP

Klíčové slovo class se používá k definování třídy v PHP. Níže jsou uvedena pravidla pro vytvoření třídy v PHP.

  • Název třídy by měl začínat písmenem
  • Název třídy nemůže být vyhrazené slovo PHP
  • Název třídy nesmí obsahovat mezery

Řekněme, že chceme vytvořit třídu pro reprezentaci zvířat.

Začneme identifikací znaků, které jsou společné všem zvířatům.

  • Všechna zvířata patří do rodiny, jako je býložravec, karneval atd.
  • Všechna zvířata jedí jídlo

Níže uvedený diagram ukazuje diagram pro zvíře

Vytvořte třídu v PHP

Pojďme nyní kódovat naši třídu zvířat

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

TADY,

  • „private $family, $food“ znamená, že k proměnným nelze přistupovat přímo mimo třídu (Encapsulation).
  • “veřejná funkce __construct($family…)” je metoda konstruktoru php. Tato funkce je volána vždy, když byla vytvořena instance třídy. V tomto případě nastavujeme rodinu a jídlo.
  • „public function get…()“ je metoda používaná pro přístup k hodnotě rodiny nebo jídla (zapouzdření)
  • „public function set…()“ je metoda používaná k nastavení hodnoty rodiny nebo jídla (zapouzdření)

Jak implementovat dědičnost v PHP

Budeme pracovat s krávou a lvem. Kráva i lev dědí ze třídy zvířat.

Níže uvedený diagram tříd ukazuje vztahy.

implementovat dědičnost v PHP

Všimněte si, že kráva dědí ze třídy zvířat a také definuje svou vlastní proměnnou a metody.

Pojďme nyní kódovat třídu 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;
    }
}
?>

Pojďme nyní kódovat třídu Lion

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

TADY,

  • „třída … rozšiřuje zvíře“ přiměje krávu a lva používat metody ze třídy zvířat (dědičnost).

Jak vytvořit objekt třídy

Třídy Animal, Cow a Lion by měly být kvůli jednoduchosti všechny ve stejném adresáři.

Pojďme nyní vytvořit aplikaci, která používá naše třídy.

Příklad třídy 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();
?>

Testování naší aplikace

Podívejme se nyní na naši aplikaci ve webovém prohlížeči

Dědičnost v PHP

Fantastické právo! Podívejme se nyní na třetí princip OOP, polymorfismus.

Řekněme, že chceme vyvinout aplikaci, která se připojí k různým databázovým strojům jako např MySQL si SQL Server, ale používají stejné jednotné rozhraní.

Můžeme vytvořit rozhraní, které definuje standardní metody a abstraktní třídu, která implementuje běžné metody.

  • Rozhraní – je to podobné jako třída. Definuje pouze metody a parametry.
  • Abstraktní třída – je to třída, kterou nelze použít k přímému vytvoření objektu. Jeho účelem je poskytnout částečné nebo úplné implementace běžných metod.

Níže uvedený diagram tříd ilustruje vztah mezi našimi abstraktními třídami, rozhraními a implementačními třídami.

Dědičnost v PHP

Nyní vytvoříme naši abstraktní třídu

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

TADY,

  • „abstraktní třída“ znamená, že třídu nelze použít přímo k vytvoření objektu php
  • „$host,$db…“ jsou proměnné třídy společné pro všechny implementace
  • „function __construct(…)“ je metoda konstruktoru třídy php, která nastavuje hodnoty společných proměnných při inicializaci

Pojďme nyní vytvořit rozhraní, které obsahuje standardní metody, které budou implementovány odlišně v závislosti na databázovém stroji.

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

TADY,

  • „rozhraní“ je klíčové slovo pro vytváření rozhraní
  • „veřejná funkce…(…)“ jsou standardní metody, které by měly být implementovány

Pojďme nyní vytvořit konkrétní třídy, které rozšíří třídu DBCommonMethods a rozšíří rozhraní 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 }
 } ?>

TADY,

  • „třída … rozšiřuje DBCommonMethods“ používá metody v DBCommonMethods
  • „… implementuje DBInterface“ zajišťuje, že třída poskytuje standardní metody bez ohledu na použitý databázový ovladač.

Použití výše uvedeného kódu Kód používající výše uvedenou třídu by vypadal takto

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

Or

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

Zbytek kódu by byl stejný pro oba ovladače, jako je;

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

Shrnutí

  • Objektově orientované programování OOP je výkonná technika, která modeluje aplikace podle objektů reálného světa
  • Třída je reprezentace objektů reálného světa s vlastnostmi a metodami
  • Tři základní principy OOP jsou;
  • Zapouzdření
  • Dědictví
  • Polymorfismus