PHP objektno orijentirano programiranje (OOPs) koncept Vodič s primjerom
Što je OOPs?
Objektno orijentirani je pristup razvoju softvera koji modelira aplikaciju oko objekata stvarnog svijeta kao što su zaposlenici, automobili, bankovni računi itd. Klasa definira svojstva i metode objekta stvarnog svijeta. Objekt je pojava klase.
Tri osnovne komponente objektne orijentacije su;
- Objektno orijentirana analiza – funkcionalnost sustava
- Objektno orijentirano projektiranje – arhitektura sustava
- Objektno orijentirano programiranje – implementacija aplikacije
Načela objektno orijentiranog programiranja
Tri glavna principa OOP-a su;
- ovijanje – ovo se odnosi na skrivanje detalja implementacije i samo izlaganje metoda. Glavna svrha enkapsulacije je;
- Smanjite složenost razvoja softvera – skrivanjem detalja implementacije i izlaganjem samo operacija, korištenje klase postaje jednostavno.
- Zaštitite unutarnje stanje objekta – pristup varijablama klase je putem metoda kao što su get i set, što klasu čini fleksibilnom i jednostavnom za održavanje.
- Interna implementacija klase može se mijenjati bez brige o razbijanju koda koji koristi klasu.
- Nasljeđivanje – ovo se odnosi na odnos između klasa. Odnos ima oblik roditelja i djeteta. Dijete koristi metode definirane u roditeljskoj klasi. Glavna svrha nasljeđivanja je;
- Mogućnost ponovne upotrebe – određeni broj djece može naslijediti od istog roditelja. Ovo je vrlo korisno kada moramo pružiti uobičajenu funkcionalnost kao što je dodavanje, ažuriranje i brisanje podataka iz baze podataka.
- polimorfizam – ovo se odnosi na postojanje jednog obrasca, ali mnogo različitih načina implementacije. Glavna svrha polimorfizma je;
- Pojednostavite održavanje aplikacija i učinite ih proširivijima.
OOP-ovi Concepts u PHP-u
PHP je objektno orijentirani skriptni jezik; podržava sve gore navedene principe. Gore navedena načela postižu se putem;
- ovijanje – korištenjem metoda “get” i “set” itd.
- Nasljeđivanje – korištenjem ključne riječi extends
- polimorfizam – korištenjem ključne riječi implements
Sada kada imamo osnovno znanje o OOP-u i kako je on podržan u PHP, pogledajmo primjere koji provode gornja načela
Što je UML?
Unified Modeling Language UML je tehnika koja se koristi za projektiranje i dokumentiranje objektno orijentiranih sustava.
UML proizvodi niz dokumenata, ali mi ćemo pogledati dijagram klasa koji je vrlo važan za objektno orijentirano php programiranje.
Primjer dijagrama klasa
Ključ dijagrama klasa
- The Gornja kutija sadrži naziv klase
- The srednja kutija sadrži varijable klase
- The donja kutija sadrži metode klase
- The minus (-) znak znači privatni opseg
- The više (+) znak znači javni opseg
- The hash (#) znak znači zaštićeni opseg
Kako stvoriti klasu u PHP-u
Ključna riječ class koristi se za definiranje klase u PHP-u. Ispod su pravila za stvaranje klase u PHP-u.
- Ime klase treba započeti slovom
- Naziv klase ne može biti PHP rezervirana riječ
- Naziv klase ne smije sadržavati razmake
Recimo da želimo stvoriti klasu za predstavljanje životinja.
Počet ćemo s identificiranjem značajki koje su zajedničke svim životinjama.
- Sve životinje pripadaju obitelji kao što su biljojedi, karnevali itd.
- Sve životinje jedu hranu
Donji dijagram prikazuje dijagram za životinju
Idemo sada kodirati našu klasu životinja
<?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;
}
}
?>
OVDJE,
- "privatna $family, $food" znači da se varijablama ne može pristupiti izravno izvan klase (Enkapsulacija).
- “javna funkcija __construct($family…)” je metoda php konstruktora. Ova se funkcija poziva svaki put kada se stvori instanca klase. U ovom slučaju postavljamo obitelj i hranu.
- "javna funkcija dobiti...()" je metoda koja se koristi za pristup obiteljskoj ili hranidbenoj vrijednosti (inkapsulacija)
- "Public Function Set...()" je metoda koja se koristi za postavljanje obiteljske ili prehrambene vrijednosti (Enkapsulacija)
Kako implementirati nasljeđivanje u PHP-u
Radit ćemo s kravom i lavom. I krava i lav nasljeđuju iz klase životinja.
Donji dijagram klasa prikazuje odnose.
Imajte na umu da krava nasljeđuje od klase životinja i također definira vlastitu varijablu i metode.
Idemo sada kodirati klasu Krava
<?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;
}
}
?>
Idemo sada kodirati klasu Lion
<?php
class Lion extends Animal
{
public function __construct($family, $food)
{
parent::__construct($family, $food);
}
}
?>
OVDJE,
- “class … extends Animal” tjera kravu i lava da koriste metode iz klase Animal (Inheritance).
Kako stvoriti objekt klase
Klase Životinja, Krava i Lav trebale bi sve biti u istom direktoriju radi jednostavnosti.
Kreirajmo sada aplikaciju koja koristi naše klase.
Primjer PHP klase
<?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();
?>
Testiranje naše aplikacije
Pogledajmo sada našu aplikaciju u web pregledniku
Fantastično pravo! Pogledajmo sada treći princip OOP-a, polimorfizam.
Recimo da želimo razviti aplikaciju koja se povezuje s različitim pogonima baze podataka kao što su MySQL i SQL Poslužitelj, ali koristite isto jedinstveno sučelje.
Možemo stvoriti sučelje koje definira standardne metode i abstract klasa koja implementira uobičajene metode.
- Sučelje – slično je klasi. On samo definira metode i parametre.
- Kormilartract klasa – to je klasa koja se ne može koristiti za izravno stvaranje objekta. Njegova je svrha pružiti djelomične ili cjelovite implementacije uobičajenih metoda.
Dijagram klase u nastavku ilustrira odnos između naših trbušnih mišićatract klasa, sučelje i implementacijske klase.
Sada napravimo trbušne mišićetract klasa
<?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;
}
}
?>
OVDJE,
- trbušnjacitrac"t class" znači da se klasa ne može izravno koristiti za stvaranje objekta u PHP-u
- “$host,$db…” su varijable klase zajedničke svim implementacijama
- “function __construct(…)” je metoda konstruktora php klase koja postavlja vrijednosti uobičajenih varijabli pri inicijalizaciji
Kreirajmo sada sučelje koje sadrži standardne metode koje će se različito implementirati ovisno o pogonu baze podataka.
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
OVDJE,
- "Sučelje" je ključna riječ za stvaranje sučelja
- “javna funkcija…(…)” standardne su metode koje bi se trebale primijeniti
Kreirajmo sada konkretne klase koje će proširiti klasu DBCommonMethods i proširiti sučelje DBInterface. MySQLVozač.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 }
} ?>
OVDJE,
- “klasa … proširuje DBCommonMethods” koristi metode u DBCommonMethods
- “… implementira DBInterface” osigurava da klasa pruža standardne metode bez obzira na upravljački program baze podataka koji se koristi.
Upotreba gornjeg koda Kod koji koristi gornju klasu bi izgledao ovako
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
Ostatak koda bi bio isti za oba vozača, kao što su;
<?php $db->db_connect(); $db->insert($data); ?>
Rezime
- Objektno orijentirano programiranje OOP moćna je tehnika koja modelira aplikacije prema objektima iz stvarnog svijeta
- Klasa je reprezentacija objekata stvarnog svijeta sa svojstvima i metodama
- Tri osnovna principa OOP-a su;
- ovijanje
- Nasljeđivanje
- polimorfizam





