[php5] Klasa obsługująca bazę danych w oparciu o Interfejsy
Zobacz pojedynczy post
Interfejs jest to zbiór funkcji, które muszą zostać zaimplementowane w klasie, która go wykorzystuje. Generalnie dużą zaletą interfejsów jest możliwość narzucenia jak jakie funkcje muszą zostać w klasie zaimplementowane i jak mają wyglądać. Wyobraźmy sobie klasę obsługującą bazę danych. Musi ona być tak napisana, aby bez względu na to, z jakiej bazy korzystamy (MySQL, PostgreSQL/MsSQL/Oracle) zawsze otrzymywać te same wyniki jednocześnie nie być zmuszonym do zmiany właściwego kodu aplikacji.
Tworząc obsługę bazy danych należy zastanowić się jak ona ma wyglądać. Można zrobić abstrakcyjną klasę podstawową, w której będzie się inicjowało zmienne, oraz klasy potomne - zawierające właściwą obsługę danej bazy danych.
plik: class.db.basic.php
PHP: |
<?php
abstract class basic
{
protected $server; //server
protected $user; //uzytkownik bazy danych
protected $pass; //hasło bazy danych
protected $db; //nazwa bazy danych
protected $persistent_conn; //połączenie stałe ?
public $message; //bład
protected $connection_id; //numer połączenia
public $query_result; //wynik zapytania
final public function db_configure($config)
{
$this->server=$config['server'];
$this->user=$config['user'];
$this->pass=$config['pass'];
$this->db=$config['db'];
$this->persistent_conn=$config['persistent_conn'];
unset($this->query_result);
unset($this->connection_id);
}
}
?>
|
mamy podstawową klasę. Każda klasa potomna będzie dziedziczyć funkcję db_configure. Pomyślmy, jak mógłby wyglądać projekt interfejsy:
plik: class.db.interface.php
PHP: |
<?php
interface db
{
public function db_configure($config);
public function db_connect();
public function db_query($query = "");
public function db_close();
}
?>
|
W takim wypadku klasa obsługująca bazę będzie wyglądać tak:
plik: class.db.mysql.php
PHP: |
<?php
class mysql extends basic implements db
{
public function db_connect()
{
$this->message="";
if($this->persistent_conn)
@$this->connection_id=mysql_pconnect($this->server, $this->user, $this->pass) or $this->message.="Error ".mysql_errno().": Can not connect to MySQL <br>";
else
@$this->connection_id=mysql_connect($this->server, $this->user, $this->pass) or $this->message.="Error ".mysql_errno().": Can not connect to MySQL <br>";
if($this->message == "") @Mysql_select_db($this->db) or $this->message.="Error ".mysql_errno().": Can not connect to database <br>";
}
public function db_query($query = "")
{
unset($this->query_result);
if($query != "")
{
$this->query_result = @mysql_query($query, $this->connection_id);
}
if($this->query_result)
{
return $this->query_result;
}
else
{
return false;
}
}
public function db_close()
{
if($this->connection_id)
{
if(IsSet($this->query_result))
{
@mysql_free_result($this->query_result);
unset($this->query_result);
}
$result=@mysql_close($this->connection_id);
unset($this->connection_id);
return $result;
}
else
{
return false;
}
}
}
?>
|
Powyższa klasa nie ma zaimplementowanej funkcji db_configure gdyż dziedziczy ją od swojej klasy macierzystej.
|