Jump to content
php.lv forumi

Extendot mysqli vai nē?


Lynx

Recommended Posts

Pirms kāda laika uzrakstīju savu mysql/mysqli klasi, lai varētu viegli pārslēgties ar projektu no php 4 uz php 5 serveri un otrādi un atvieglot error reportingu, pašu sintaksi un citus sīkumus.

Un pēdējā laikā vairāk studējot par php oop un veidojot vienu dinamisku projektu radās loģisks jautājums, kā labāk rīkoties mysqli gadijumā. Līdz šim visu laiku mana klase bāzējās uz: class db extends mysqli { } un piekļuvām vajadzīgajam elementiem ar parent:: tb if (!($result = @parent::query($sql))) { //error reports }

 

Vakar domāju vai gadijumā nav lieks overkills jo to pašu pēc php manuāļa var panākt izmantojot vairāk proceduālu stilu neextendojot mysqli, tāpēc ātri uzrakstīju jaunu versiju šādi te:

//pseido kods 
class db
{
protected $link; 

function __construct($server, $username, $password, $db) 
{
if(!($this->link = @mysqli_connect($server, $username, $password, $db)))
	{
		 //error_reports
			 }
public function query($sql)
  {
if (!$result = @mysqli_query($this->link,$sql)) { } 
etc..

Skripta izpildes laiki pilnīgi neatšķiras starp šīm metodēm(vai arī atšķirība ir tik sīka, ka nemanu), meklējot devnetwork.net un googlē arī nespēju rast atbildi jautājumam: Kāda reali ir slēptā atširība starp abām metodēm un kuru labāk izmantot, jo cenšos iemācīties pareizu oop?

Link to comment
Share on other sites

jēga no OOP būs tad, kad tu pieliksi papildus funkcionalitāti.. vai arī softs izmantos dažādas DB (forums)

 

Man piemēram ir uztaisīts addQueryLimit, postgre un mysql tie atšķirās..

$sql = $db->addQueryLimit($sql,$start,$count);

$db->query($sql);

 

Bet imho neiesaku iespringst uz šito, labāk rakstīt softu vienai DB.

Link to comment
Share on other sites

Pareiza oop gadjumā, laikam tomēr "class DB extends mysqli {..}" :)

Bet ja iespringsti uz dažādu db izmantošanu, tad fasādes klase, un draiveru klases dažādām db. Kaut kā tādā stilā:

 

class DB {
  private $db_driver = NULL;

  public function __construct($driver_name) {
   $this->db_driver = new $driver_name();
  } 
  public function insert($table,$values) {
   $this->db_driver->insert($table,$values);
  } 
  ...
}
class Mysqli_db {
...
}
class Postgre_db {
...
}

Edited by john.brown
Link to comment
Share on other sites

Papildus funkcionalitāte tur ir, vienkārši šis ir mazs izrāvums no visas klases, lai parādītu darbības principu.

 

Jo jautājums bija par pamata struktūru vai labāk ir extendot myqsli un lietot parent::query($sql) vai neekstendot un rakstīt izmantojot vienkārši funkcijas un padodot linka argumentus: mysqli_query($this->link, $sql) un kāda reali ir atšķirība, jo izpildes ātrums nemainās.

 

[edit]Un uz ko kamēr rakstīju atbidli, john.brown paspēja atbildēt.

Link to comment
Share on other sites

×
×
  • Create New...