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

OOP-ovi Concepts u PHP-u

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

Napravite klasu u PHP-u

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.

implementirati nasljeđivanje u PHP-u

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

Nasljeđivanje u PHP-u

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.

Nasljeđivanje u PHP-u

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