Lynx Posted September 22, 2006 Report Share Posted September 22, 2006 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 More sharing options...
Delfins Posted September 22, 2006 Report Share Posted September 22, 2006 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 More sharing options...
john.brown Posted September 22, 2006 Report Share Posted September 22, 2006 (edited) 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 September 22, 2006 by john.brown Link to comment Share on other sites More sharing options...
Lynx Posted September 22, 2006 Author Report Share Posted September 22, 2006 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 More sharing options...
bubu Posted September 22, 2006 Report Share Posted September 22, 2006 Ja klase A manto klasi B, tad jāvar pateikt "A ir B". Ja tas "ir" neskan loģiski, tad nevajag mantot. Link to comment Share on other sites More sharing options...
Recommended Posts