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ő.
-- az adatbázis create database vmi; create table website ( id int not null primary key auto_increment, event varchar(100) );
<?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; } }
<?php interface iDatabase { public function getEvent(); }
<?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>"; } }
<?php include_once('Page.php'); $page = new Page(new Mariadb()); $page->showEvent();
<?php define('HOST', 'localhost'); define('USER', 'dbuser'); define('PASS', 'titok'); define('DBNAME', 'dbname');