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





