Dupa cum bine se stie PHP-ul este un limbaj orientat pe cod iar suportul pentru clase a aparut abia mai tarziu.
Astazi m-am gindit sa va arat un mic tutorial, si ca sa fiu mai practic am sa realizez citeva clase ce implementeaza majoritatea operatiilor necersare in lucrul cu baza de date in principiu este vorba de patru clase
MysqlQuerry MysqlConnector MysqlController si MysqlResource.
Si ca sa profitam la maxim de flexibilitatea oferita de progrmarea obiectuala haideti ca si clasele noastre sa implementeze fiecate cite o interfata…poate considerati acest pas inutil dar sa ne inchipuim ca dorim sa realizam o aplicatie ce foloseste un server de Mysql dar in timp s-ar putea sa facem o migratie catre un alt server tot ce trebuie sa facem este sa realizam clase ce implementeaza interfetele si modificariile in aplicatia noastra vor fi minime minime atita vreme cit interfata este respectata.
Mai jos este dat codul pentru fiecare dintre interfete
DbQuerry
| Cod: |
| interface DbQuerry {
/** |
DbController
| Cod: |
| interface DbController {
/** /** /** /** /** /** |
DbConnector
| Cod: |
| interface DbConnector {
/** /** /** |
DbTable
| Cod: |
| interface DbTable {
/** /** /** /** /** |
Aplicatia va lucra doar cu interfatele (de fapt cu implementari ale interfetelor) si in acest mod se respecta bine cunoscutul principuiu al segregarii interfetelor de implementare.
Acum haideti sa arunacam o privire asupra implemetarii interfetelor
MysqlQuerry
| Cod: |
| class MysqlQuerry implements DbQuerry { /** * @AttributeType Database.MysqlResource */ private $resource; /** * @AttributeType boolean * */ public static $debug=false; /** /** /** $result=mysql_query($querry,$this->resource->getResource()); $resource=new MysqlResource($result); if(MysqlQuerry::$debug==true) return $resource; |
MysqlController
| Cod: |
| class MysqlController extends MysqlQuerry implements DbController { /** * @AttributeType string */ private $databaseName; /** /** } /** if(is_array($colomns)) /** /** /** /** } |
MysqlConnector
| Cod: |
| lass MysqlConnector implements DbConnector { /** * @AttributeType string */ private $password; /** * @AttributeType Database.DbResource */ private $link; /** * @AttributeType string */ private $user; /** * @AttributeType string */ private $host; /** /** /** /** /** $this->link=new MysqlResource($result); |
MysqlResource
| Cod: |
| class MysqlResource implements DbResource { private $resource; /** public function getResource() { } |
MysqlTable
| Cod: |
| class MysqlTable extends MysqlQuerry implements DbTable { /** * @AttributeType string */ private $name; /** * @AttributeType string */ private $tableResource=null; /** * @AttributeType DbController */ private $controllerLink; /** * @ParamType name * @ParamType connector Database.MysqlConnector */ public function MysqlTable($name, MysqlController $controler) { parent::MysqlQuerry($controler->getLink()); $this->name=$name; $this->controllerLink=$controler; } /** $this->execQuery(“INSERT INTO $this->name ($colomns) VALUES (‘$values’)”); /** /** $rez=array(); for($i=0;$i<count($colomns)-1;$i++){ $this->execQuery(“UPDATE $this->name SET $rez WHERE $conditions”); } /** } /** $i=0; while($row=mysql_fetch_object($this->tableResource->getResource())) return new MysqlResource($result); return mysql_num_rows($this->tableResource->getResource()); } |
Pentru a trata diversele erori ce pot aparea in timpul lucrului cu baza de date se lucreaza cu exceptii.Iata un exemplu ce foloseste clasele de mai sus, sa presupunem ca avem un tabel cu doua cimpuri id si nume:
| Cod: |
| <?php … try { $connector=new MysqlConnector(“host”,”user”,”parola”); $controller=new MysqlController(“nume_baza_de_date”,$connector); $table=new MysqlTable(“nume_tabel”,$controller); $table->select(“*”,”id=’1′”); $data=$table->getData()->getResource(); for($i=0;$i<count($data);$i++) } catch $ex) ?> |
O observatie foarte importanta este ce in cazul catchurilo ordinea este importanta astfel de exmplu daca aveam primul chatch MysqlException de fiecare data cind aparea o exceptie se intra pe primul catch deoarece MysqlException este o calsa din care se deriveaza celelalte tipuri astfel o exceptie de tipul MysqlSintaxException este si de tipul MysqlException.
Pentru a va face o face o imagine asupra ierarhiei de clase am atasat o imagine


Recent Comments