PHP Object Oriented Programming (OOPs) koncepció oktatóanyag példával

Mi az az OOPs?

Az objektumorientált egy olyan szoftverfejlesztési megközelítés, amely valós objektumok, például alkalmazottak, autók, bankszámlák stb. körül modellezi az alkalmazást. Egy osztály határozza meg a valós világban lévő objektumok tulajdonságait és módszereit. Az objektum egy osztály előfordulása.

Az objektumorientáció három alapvető összetevője;

  • Objektumorientált elemzés – a rendszer funkcionalitása
  • Objektumorientált tervezés – a rendszer architektúrája
  • Objektum orientált programozás – az alkalmazás megvalósítása

Objektumorientált programozási alapelvek

Az OOP három fő alapelve;

  • Egységbezárás – ez a megvalósítás részleteinek elrejtésére és csak a módszerek feltárására vonatkozik. A tokozás fő célja, hogy;
  • Csökkentse a szoftverfejlesztés bonyolultságát – a megvalósítás részleteinek elrejtésével és csak a műveletek feltárásával az osztályok használata egyszerűbbé válik.
  • Védje egy objektum belső állapotát – az osztályváltozókhoz olyan metódusokon keresztül lehet hozzáférni, mint a get és set, ami rugalmassá és könnyen karbantarthatóvá teszi az osztályt.
  • Az osztály belső megvalósítása megváltoztatható anélkül, hogy aggódna az osztályt használó kód feltörése miatt.
  • Öröklés – ez az osztályok közötti viszonyra vonatkozik. A kapcsolat szülő és gyermek formáját ölti. A gyermek a szülő osztályban meghatározott metódusokat használja. Az öröklés fő célja;
  • Újrafelhasználhatóság – több gyermek örökölheti ugyanazt a szülőt. Ez nagyon hasznos, ha olyan általános funkciókat kell biztosítanunk, mint például adatok hozzáadása, frissítése és törlése az adatbázisból.
  • polimorfizmus – ez arra vonatkozik, hogy egyetlen forma, de sok különböző megvalósítási mód legyen. A polimorfizmus fő célja;
  • Egyszerűsítse az alkalmazások karbantartását és bővíthetőbbé tegye őket.

OOP-k Concepts PHP-ben

A PHP egy objektumorientált szkriptnyelv; a fenti elvek mindegyikét támogatja. A fenti alapelveket a következőkkel érik el;

  • Egységbezárás – „get” és „set” metódusok használatával stb.
  • Öröklés – extends kulcsszó használatával
  • polimorfizmus – az implements kulcsszó használatával

Most, hogy rendelkezünk az OOP alapismereteivel és annak támogatásával PHP, nézzünk példákat, amelyek megvalósítják a fenti elveket

Mi az UML?

Az Unified Modeling Language UML egy technika, amelyet objektumorientált rendszerek tervezésére és dokumentálására használnak.

Az UML számos dokumentumot készít, de megnézzük az osztálydiagramot, amely nagyon fontos az objektumorientált php programozáshoz.

Osztálydiagram példa

OOP-k Concepts PHP-ben

Osztálydiagram kulcs

  • A Felső doboz osztály nevét tartalmazza
  • A középső doboz osztályváltozókat tartalmaz
  • A alsó doboz osztálymetódusokat tartalmaz
  • A mínusz (-) jel azt jelenti magán hatókör
  • A plusz (+) jel közterületet jelent
  • A hash (#) jel védett hatókört jelent

Hogyan hozzunk létre osztályt PHP-ben

A class kulcsszó egy osztály meghatározására szolgál PHP-ben. Az alábbiakban bemutatjuk az osztály létrehozásának szabályait PHP-ben.

  • Az osztály nevének betűvel kell kezdődnie
  • Az osztálynév nem lehet PHP által fenntartott szó
  • Az osztálynév nem tartalmazhat szóközt

Tegyük fel, hogy szeretnénk létrehozni egy osztályt az állatok ábrázolására.

Kezdjük az összes állatra jellemző tulajdonságok azonosításával.

  • Minden állat egy családhoz tartozik, például növényevő, karnevál stb.
  • Minden állat táplálékot eszik

Az alábbi diagram az állat diagramját mutatja

Hozzon létre egy osztályt PHP-ben

Most kódoljuk az állatosztályunkat

<?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;
    }
}
?>

ITT,

  • A „privát $család, $étel” azt jelenti, hogy a változók nem érhetők el közvetlenül az osztályon kívül (Encapsulation).
  • A „nyilvános függvény __construct($family…)” a php konstruktor metódusa. Ez a függvény minden alkalommal meghívásra kerül, amikor az osztály egy példányát létrehozták. Ebben az esetben a családot és az élelmet biztosítjuk.
  • A „nyilvános funkció kap…()” a családi vagy élelmiszer-érték eléréséhez használt módszer (kapszulázás)
  • A „nyilvános funkciókészlet…()” a család vagy élelmiszer értékének beállítására használt módszer (kapszulázás)

Hogyan valósítsuk meg az öröklődést PHP-ben

Egy tehénnel és egy oroszlánnal fogunk dolgozni. A tehén és az oroszlán is az Animal osztályból örököl.

Az alábbi osztálydiagram mutatja a kapcsolatokat.

implementálja az öröklődést PHP-ben

Vegye figyelembe, hogy a tehén az állatosztályból örököl, és meghatározza a saját változóit és metódusait is.

Most kódoljuk a Cow osztályt

<?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;
    }
}
?>

Kódoljuk most az Oroszlán osztályt

<?php
class Lion extends Animal
{
    public function __construct($family, $food)
    {
        parent::__construct($family, $food);
    }
}
?>

ITT,

  • Az „class … extends Animal” a tehén és az oroszlán az Animal osztály (öröklés) metódusait használja.

Hogyan lehet létrehozni az osztály objektumát

Az Animal, Cow és Lion osztályoknak az egyszerűség kedvéért ugyanabban a könyvtárban kell lenniük.

Most készítsük el az osztályainkat használó alkalmazást.

PHP osztály példa

<?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();
?>

Alkalmazásunk tesztelése

Most nézzük meg az alkalmazásunkat egy webböngészőben

Öröklődés PHP-ben

Fantasztikus igaz! Nézzük most az OOP harmadik elvét, a polimorfizmust.

Tegyük fel, hogy egy olyan alkalmazást szeretnénk fejleszteni, amely különböző adatbázis-motorokhoz csatlakozik, mint pl MySQL és a SQL Szerver, de ugyanazt az egységes felületet használja.

Létrehozhatunk egy interfészt, amely meghatározza a szabványos metódusokat, és egy absztrakt osztályt, amely megvalósítja a közös metódusokat.

  • Felület – egy osztályhoz hasonlít. Csak a módszereket és a paramétereket határozza meg.
  • Absztrakt osztály – ez egy olyan osztály, amely nem használható közvetlenül objektum létrehozására. Célja az általános módszerek részleges vagy teljes megvalósítása.

Az alábbi osztálydiagram szemlélteti absztrakt osztályaink, interfészeink és megvalósítási osztályaink közötti kapcsolatot.

Öröklődés PHP-ben

Most hozzuk létre az absztrakt osztályunkat

<?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;
    }
}
?>

ITT,

  • Az „absztrakt osztály” azt jelenti, hogy az osztály nem használható közvetlenül a php objektum létrehozására
  • A „$host,$db…” osztályváltozók, amelyek minden implementációban közösek
  • A "függvény __construct(…)" a php osztály konstruktor metódusa, amely beállítja a közös változók értékeit inicializáláskor

Most hozzuk létre azt a felületet, amely tartalmazza a szabványos metódusokat, amelyek az adatbázis-motortól függően eltérően kerülnek megvalósításra.

<?php
interface DBInterface
{
    public function db_connect();
    public function insert($data);
    public function read($where);
    public function update($where);
    public function delete($where);
}
?>

ITT,

  • Az „interfész” az interfészek létrehozásának kulcsszava
  • „közfeladat…(…)” azok a szabványos módszerek, amelyeket végre kell hajtani

Most hozzuk létre azokat a konkrét osztályokat, amelyek kiterjesztik a DBCommonMethods osztályt és kiterjesztik a DBInterface felületet. 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 } 
} ?>

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 }
 } ?>

ITT,

  • A „class … kiterjeszti a DBCommonMethods-t” a DBCommonMethods metódusait használja
  • A „… implements DBInterface” biztosítja, hogy az osztály szabványos metódusokat biztosítson, függetlenül a használt adatbázis-illesztőprogramtól.

A fenti kód használata A fenti osztályt használó kód így néz ki

<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>

Or

<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>

A kód többi része mindkét illesztőprogram esetében ugyanaz, mint pl.

<?php
$db->db_connect();
$db->insert($data);
?>

Összegzésként

  • Objektumorientált programozás Az OOP egy hatékony technológia, amely valós objektumok után modellezi az alkalmazásokat
  • Az osztály valós világbeli objektumok reprezentációja tulajdonságokkal és módszerekkel
  • Az OOP három alapelve;
  • Egységbezárás
  • Öröklés
  • polimorfizmus