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
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
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.
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
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.
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