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.

  • 🧱 Klase i objekti: Klasa definira svojstva i metode stvari iz stvarnog svijeta, a objekt je jedna instanca te klase.
  • 🔒 ovijanje: Privatne varijable s javnim metodama get i set skrivaju interne detalje i štite stanje objekta.
  • 👪 nasljedstvo: Ključna riječ extends omogućuje podređenoj klasi ponovnu upotrebu metoda roditeljske klase, smanjujući duplicirani kod.
  • 🔁 polimorfizam: Sučelje definira standardne metode koje mnoge klase implementiraju različito iza jedne uniformne konotacije.tract.
  • 📐 UML dijagram klase: Dijagram klase prikazuje naziv klase, varijable i metode, s plusom, minusom i hashom koji označavaju javni, privatni i zaštićeni opseg.
  • 🧩 Sučelja i Abstract: TrbušnjacitracKlasa t dijeli zajednički kod, dok sučelje jamči da svaka klasa upravljačkog programa pruža iste metode.
  • 🤖 AI pomoć: AI alati mogu generirati PHP klasu iz opisa i refaktorirati proceduralni kod u čist objektno orijentirani kod.

Objektno orijentirano programiranje u PHP-u

Š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

OOP-ovi Concepts u PHP-u

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.

Napravite klasu u PHP-u

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.

implementirati nasljeđivanje u PHP-u

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.

Nasljeđivanje u PHP-u

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.

Nasljeđivanje u PHP-u

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.

Pitanja i odgovori

TrbušnjacitracKlasa t može sadržavati i implementirane metode i svojstva, a klasa proširuje samo jedno. Sučelje deklarira samo potpise metoda, a klasa može implementirati više njih. Koristite abstract klasa za dijeljenje koda, sučelje za provođenje contract.

Četiri stupa su enkapsulacija, nasljeđivanje, polimorfizam i abstraccija. Ovaj vodič se fokusira na prva tri; trbušnjaketraccija skriva složene detalje iza jednostavnog sučelja, što PHP podržava s abstract klase i sučelja.

Javni članovi su dostupni bilo gdje, privatni članovi samo unutar iste klase, a zaštićeni članovi unutar klase i njezinih podklasa. Oni provode enkapsulaciju kontrolirajući tko može čitati ili mijenjati svako svojstvo ili metodu.

Da. Dajte umjetnoj inteligenciji polja ili definiciju tablice i ona može stvoriti klasu s tipiziranim svojstvima, konstruktorom te metodama get i set. Revpregledajte tipove i dodajte validaciju prije korištenja klase.

Da. Zalijepite proceduralni skript i umjetna inteligencija može grupirati povezane funkcije i podatke u klase, primijeniti enkapsulaciju i predložiti nasljeđivanje ili sučelja. Testirajte refaktorirani kod, jer bi ponašanje trebalo ostati identično.

Sažmite ovu objavu uz: