Joyride Posted August 14, 2007 Report Share Posted August 14, 2007 Neesmu ipasi draugos ar php patterniem, tapec jautasu jums. Taisu DB abstrakcijas klasi, bet apstajos pie vienas problemas. Galarezultatu es gribetu redzet sadu: $DB = new TDatabase('mysql'); $DB->GetRows($table_name, $where); ...utt... to var vienkarsi izdarit, kaut ka sadi ieks TDatabase konstruktora: switch($driver) { case 'mysql': return new TDriverMySQL(); break; case 'mysql': return new TDriverPgSQL(); break; default: throw new Exception('Unknown DB driver: ' . $driver); break; } bet es velos, lai "draiveri" tiktu automatiski izveidoti, piemeram, ir mape Drivers un tur ieksa ir faili: driver_mysql.php, driver_pgsql.php utt. Ja tiek padots $driver ka "oracle", tiek inkludots driver_oracle.php un return atgriez new TDriverOracle klasi. Vardu sakot, lai jauna draivera pievienosana beidzas ar to, ka draiveru mape atliek tikai iemest draivera failu. Jautajums ir - ka to panakt, ka TDatabase konstruktors pec $driver uztaisa un atgriez atbilsotoso klasi? Link to comment Share on other sites More sharing options...
Delfins Posted August 14, 2007 Report Share Posted August 14, 2007 (edited) __construct($driverName) { $filename = 'driver_'.$friverName.'.php'; if (file_exists($filename)) { // ob start include_once($filename); // ob_end_clean $className = 'TDriver'.$friverName; if (!class_exists($className)) { throw ... } } else { throw ... } return new $className(); } Edited August 14, 2007 by Delfins Link to comment Share on other sites More sharing options...
black Posted August 14, 2007 Report Share Posted August 14, 2007 Nevari vienkaarhi includot/inicializēt to draivera failu? :) Link to comment Share on other sites More sharing options...
Kavacky Posted August 14, 2007 Report Share Posted August 14, 2007 (edited) Nav vienkāršāk pie lapas uzstādīšanas norādīt, kuri draiveri jālieto? A to kaut kāds ļevais risinājums tas liekas. Pie katras komandas tak kompis nečeko, kura no nVidias kartēm man ir un kuru funkciju kur saukt. Nemainīsies tak ik pa 5 minūtēm datubāze. Viena uuberDB klase ar visiem iespējamajiem variantiem ir pārāk liela sarežģīšana, manuprāt. Edited August 14, 2007 by Kavacky Link to comment Share on other sites More sharing options...
v3rb0 Posted August 14, 2007 Report Share Posted August 14, 2007 (edited) un factorijas productu dorši vien ka gribēsi kā singletonu. tāpat draiverim interfeisu sadomā un piekabini klāt, it sevišķi, ja taisies atļaut kādam citam rakstīt viņus. Edited August 14, 2007 by v3rb0 Link to comment Share on other sites More sharing options...
Delfins Posted August 14, 2007 Report Share Posted August 14, 2007 (edited) Pie katras komandas tak kompis nečeko, kura no nVidias kartēm man ir un kuru funkciju kur saukt. A vot šeit tu 100% maldies... Pie katras ieslēgšanas notiek inicializācija. Tā kā PHP izpilde nav process, tas pielīdzinams pilnai ielādei. Nemainīsies tak ik pa 5 minūtēm datubāze. Un ja raksta pluginus? Teiksim kāds plugins konektējās pie attālas DB, parametrus ņem no DB. Globālo gan var uztaisīt ar `new TMysqlDb()` / whatever PS: turklāt ielādes kods atšķirās tikai ar pārs rindiņām. Edited August 14, 2007 by Delfins Link to comment Share on other sites More sharing options...
Joyride Posted August 14, 2007 Author Report Share Posted August 14, 2007 Delfins - lielum lielais paldies! Un ja raksta pluginus? Teiksim kāds plugins konektējās pie attālas DB, parametrus ņem no DB. Jap, paralels darbs ar mysql un mssql. Gribas uztaisit vienotu DB piekljuves interfeisu, un jutu, ka tuvakaja laika var nakties stradat ar vel kadu citu DBVS. Link to comment Share on other sites More sharing options...
NiTrino Posted August 15, 2007 Report Share Posted August 15, 2007 $filename = 'driver_'.$friverName.'.php'; if (file_exists($filename)) no performances viedokļa man liekas tas ir bik bremzējoši, it īpaši ja pie katra refresh tas notiek. kaut gan ja nav 200+ onlainā tad varbūt vienalga. Link to comment Share on other sites More sharing options...
Joyride Posted August 15, 2007 Author Report Share Posted August 15, 2007 Tada veida PHP darbojas, ja Tev projekta ir smagie Smarty vai ADODB libi, tad tie ari pie katra refresha tie tiks ieladeti. Protams, ja netiek lietots kads opcode cache. Link to comment Share on other sites More sharing options...
Delfins Posted August 15, 2007 Report Share Posted August 15, 2007 NiTrino, tajā vietā tu vari rakstīt vienkārši: require_once $driverFileName; Bet tad tu nekad netiksi līdz custom throw... vienīgais neesmu mēģinājis, kas notiek ja izdara: try { require_once $x } catch { ... } Link to comment Share on other sites More sharing options...
v3rb0 Posted August 15, 2007 Report Share Posted August 15, 2007 no require dabūsi fatal error, nevis izmestu exceptionu. Link to comment Share on other sites More sharing options...
NiTrino Posted August 16, 2007 Report Share Posted August 16, 2007 (edited) @include $driverFileName; bet taa ir seku risināšana, nevis cēloņu :) Edited August 16, 2007 by NiTrino Link to comment Share on other sites More sharing options...
Delfins Posted August 16, 2007 Report Share Posted August 16, 2007 NiTrino, iesaku aizmirst par tādu `@` Tas ir ļaunākais murgs, kas ir iekš PHP. Link to comment Share on other sites More sharing options...
Recommended Posts