Koncept objektno orijentiranog programiranja (OOP) u PHP-u s primjerom
โก Pametni saลพetak
Objektno orijentirano programiranje u PHP-u modelira aplikaciju oko objekata iz stvarnog svijeta koristeฤi klase i objekte. Ovaj vodiฤ objaลกnjava OOP principe enkapsulacije, nasljeฤivanja i polimorfizma, kako ih PHP podrลพava te korak po korak gradi primjere radnih klasa, nasljeฤivanja i suฤelja.

ล to je OOPs?
Objektno orijentirano programiranje je pristup razvoju softvera koji modelira aplikaciju oko objekata iz stvarnog svijeta kao ลกto su zaposlenici, automobili i bankovni raฤuni. Klasa definira svojstva i metode objekta iz stvarnog svijeta. Objekt je instanca klase.
Tri osnovne komponente orijentacije na objekt su:
- Objektno orijentirana analiza โ funkcionalnost sustava
- Objektno orijentirani dizajn โ 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 otkrivanje samo metoda. Glavne svrhe enkapsulacije su:
- 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 ostvaruje se putem metoda kao ลกto su get i set. To klasu ฤini fleksibilnom i jednostavnom za odrลพavanje.
- Omoguฤite promjenu interne implementacije klase bez brige o oลกteฤenju koda koji koristi klasu.
- Nasljeฤivanje โ ovo se odnosi na odnos izmeฤu klasa. Odnos poprima oblik roditelja i djeteta. Dijete koristi metode definirane u roditeljskoj klasi. Glavna svrha nasljeฤivanja je:
- Ponovna upotrebljivost โ viลกe djece moลพe nasljeฤivati โโod istog roditelja. To je vrlo korisno kada moramo osigurati uobiฤajene funkcionalnosti poput dodavanja, aลพuriranja i brisanja podataka iz baze podataka.
- polimorfizam โ ovo se odnosi na postojanje jednog suฤelja s mnogo razliฤitih implementacija. Glavna svrha polimorfizma je:
- Kako bi se pojednostavilo odrลพavanje aplikacija i uฤinilo ih proลกirivima.
OOP-ovi Concepts u PHP-u
PHP je objektno orijentirani skriptni jezik; podrลพava sve gore navedene principe. Gore navedeni principi se postiลพu putem:
- ovijanje โ koriลกtenjem metoda โgetโ i โsetโ te modifikatora pristupa.
- Nasljeฤivanje โ putem koriลกtenja kljuฤne rijeฤi extends
- polimorfizam โ putem koriลกtenja kljuฤne rijeฤi implements
Sada kada imamo osnovno znanje o OOP-u i kako je on podrลพan u PHP, pogledajmo primjere koji primjenjuju gore navedena naฤela.
ล to je UML?
Unified Modeling Language (UML) je tehnika koja se koristi za dizajn i dokumentiranje objektno orijentiranih sustava.
UML stvara brojne dokumente, ali mi ฤemo se osvrnuti na dijagram klasa, koji je vrlo vaลพan za objektno orijentirano PHP programiranje.
Primjer dijagrama klasa
Kljuฤ dijagrama klasa
- The gornji okvir 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 nekoj porodici kao ลกto su biljojedi, mesojedi itd.
- Sve ลพivotinje jedu hranu
Donji dijagram prikazuje dijagram klase za ลพivotinju.
Sada kodirajmo 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).
- โpublic function __construct($familyโฆ)โ je PHP metoda konstruktora. Ova funkcija se poziva svaki put kada se stvori instanca klase. U ovom sluฤaju postavljamo obitelj i hranu.
- โjavna funkcija getโฆ()โ je metoda koja se koristi za pristup vrijednosti obitelji ili hrane (enkapsulacija)
- โjavna funkcija setโฆ()โ je metoda koja se koristi za postavljanje vrijednosti obitelji ili hrane (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 klasu Animal i definira vlastitu varijablu i metode.
Sada kodirajmo klasu 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; } } ?>
Sada kodirajmo klasu Lion.
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
OVDJE,
- โklasa โฆ proลกiruje Animalโ omoguฤuje klasama Cow i Lion koriลกtenje metoda iz klase Animal (nasljeฤivanje).
Kako kreirati objekt klase
Klase ลฝivotinja, Krava i Lav trebale bi sve biti u istom direktoriju radi jednostavnosti.
Sada kreirajmo 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('Carnivore', '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
Sada pogledajmo naลกu aplikaciju u web pregledniku.
Oba objekta ponovno koriste metode get_family i get_food naslijeฤene od klase Animal, ลกto demonstrira nasljeฤivanje u akciji.
Kako implementirati polimorfizam u PHP-u
Recimo da ลพelimo razviti aplikaciju koja se povezuje s razliฤitim bazama podataka kao ลกto su MySQL i SQL Server, ali koristi isto uniformno 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
- โ$host, $dbโฆโ su varijable klase zajedniฤke svim implementacijama
- โfunction __construct(โฆ)โ je metoda konstruktora klase koja postavlja vrijednosti zajedniฤkih varijabli prilikom inicijalizacije
Sada kreirajmo suฤelje koje sadrลพi standardne metode, koje ฤe biti implementirane razliฤito ovisno o mehanizmu 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
Sada stvorimo konkretne klase koje ฤe proลกiriti klasu DBCommonMethods i implementirati suฤelje DBInterface. Prvo, 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 */ } } ?>
Zatim, 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 koriลกteni upravljaฤki program baze podataka.
Kod koji koristi gore navedene klase izgledao bi ovako:
<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>
Ili:
<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>
Ostatak koda bio bi isti za oba upravljaฤka programa, kao ลกto je:
<?php $db->db_connect(); $db->insert($data); ?>
Ovo je polimorfizam u akciji: isti pozivi metoda rade na bilo kojem upravljaฤkom programu koji implementira suฤelje, tako da se okolni kod nikada ne mijenja kada promijenite mehanizme baze podataka.





