Tartalomjegyzék

< PHP OOP

PHP OOP leválasztás interfésszel

Példa program

Leírás

Ebben a példában az interfész használatát mutatom be. Az interfésszel egy felületet biztosítunk, ami lehetővé teszik többféle megvalósítás használatát, az adatbázis kapcsolathoz.

Az adatbázisban eseményeket tárolunk, amelyet szeretnénk megjeleníteni egy weblapon.

A példában két osztályt és egy interfészt készítünk:

A page objektumot a Page osztályból hozzuk létre, amelynek a konstruktora paramétereként fogadja, az adatbázis kapcsolathoz szükséges osztályt. Az adatbázis kapcsolatot a Mariadb osztály szolgáltatja, mégis azért cserélhető, mert Page konstruktorában nem a Mariadb osztály van megadva, helyette az iDatabase interfész.

A követelmény mindössze az, hogy Mariadb osztály implementálja az iDatabase interfészt.

A példainterfész használatának előnye, hogy az adatbázis-elérés megvalósítása könnyen cserélhető.

Kód

vmi.sql
-- az adatbázis
create database vmi;
 
create table website (
    id int not null primary key auto_increment,
    event varchar(100)
);
Mariadb.php
<?php
include_once('config.php');
include_once('iDatabase.php');
 
class Mariadb implements iDatabase {
 
    public $conn;
 
    public function connect() {
        $conn = new mysqli(HOST, USER, PASS, DBNAME);
        if($conn->connect_error) {
            echo('Hiba! Kapcsolódás az adatbázishoz sikertelen!<br>');
        }
        $this->conn = $conn;
        return $this->conn;
    }
 
    public function close() {
        $this->conn->close();
    }
 
    public function getEvent() {
        $this->connect();
        $sql='select event from website';
 
        if($res = mysqli_query($this->conn, $sql)) {
            $row = $res->fetch_assoc();
            $event = $row['event'];
        }else {
            echo "Hiba! A lekérdezés nem sikerült!<br>";
        }
        $this->close();
        return $event;
    }
}
iDatabase.php
<?php
 
interface iDatabase {
    public function getEvent();
}
Page.php
<?php
 
include_once('includes/Mariadb.php');
 
class Page {
 
    private $db;
 
    public function __construct(iDatabase $db) {
        $this->db = $db;
    }
 
    public function showEvent() {
        $event = $this->db->getEvent();
        echo "Esemény: $event<br>";
    }
 
}
index.php
<?php
 
include_once('Page.php');
 
$page = new Page(new Mariadb());
$page->showEvent();
config.php
<?php
 
define('HOST', 'localhost');
define('USER', 'dbuser');
define('PASS', 'titok');
define('DBNAME', 'dbname');