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 apstraktnu klasu koja implementira uobičajene metode.
- Sučelje – slično je klasi. On samo definira metode i parametre.
- Sažetak klase – 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 klasa u nastavku ilustrira odnos između naših apstraktnih klasa, sučelja i klasa implementacije.
Kreirajmo sada našu apstraktnu klasu
<?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,
- "apstraktna klasa" znači da se klasa ne može koristiti izravno za stvaranje php objekta
- “$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