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.





