Zdravim,
chcel by som sa spytat na to ako najvhodnejsie implementovat situaciu kde mam napr. 3 triedy a v kazdej z nich vykonavam urcite operacie s databazou a chcem ma to najefektivnejsie spravene pripojenie k DB.
1.Rozmyslal som ze ci si spravim daku triedu (asi najlepsie staticku aby ich nemohlo byt viacej) DB extends mysqli ktora by vlastne mala len query metodu dako osetrenu lepsie a potom objekt new DB by som si medzi triedami posuval
2.Spravit si z tej triedy DB globalnu premenu s jej objektom. To sa mi ale moc nepaci...
Any useful ideas ?
Mysql pripojenie medzi triedami
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
nápad spraviť jednú triedu na manipuláciu s db je dobrý krok, ako z návrhového tak z programového hľadiska. Pozri si niečo o patternoch, konkrétne singleton. To ti umožní spraviť tú triedu tak, aby existovala iba jedna inštancia triedy, a teda nebudeš mať aktívnych súčasne viac spojení s db. Ten objekt potom budeš posielať do tej-ktorej triedy ako si už písal
-
__construct
Medium Expert
- Príspevky: 108
- Registrovaný: 23 sep 2009, 9:32
- Bydlisko: Dark Side of The Moon
- Kontaktovať používateľa:
Ja to má spravené tiež tak, že môže byť iba jedna inštancia:
a potom triedu s ResultSetom ..<?php
require 'MySQLResultSet.php';
////////////////////////////////////////////////////////////////////
class MySQLConnect{
//dátové členy
private $connection;
static $instances = 0;
////////////////////////////////////////////////////////////////////
//KONŠTRUKTOR
//wrapper metóda
//parametre načíta z connect.php
//pokiaľ už neexituje inštancia pripojí sa k DB
////////////////////////////////////////////////////////////////////
function __construct($hostname, $username, $password){
if(MySQLConnect::$instances == 0){
$this->connection = mysql_connect($hostname,$username,$password) or
die ( mysql_error(). "MySQL Error číslo: ".mysql_errno());
MySQLConnect::$instances = 1;
}else{
$msg = "Ukončite existujúcu inštanciu ".
"MySQLConnect class.";
die($msg);
}
}
////////////////////////////////////////////////////////////////////
//DEŠTRUKTOR
//bez komentára
////////////////////////////////////////////////////////////////////
function __destruct(){
$this->close();
}
////////////////////////////////////////////////////////////////////
//metódy
////////////////////////////////////////////////////////////////////
function createResultSet($strSQL, $databasename){
$rs = new MySQLResultSet($strSQL, $databasename, $this->connection );
return $rs;
}
////////////////////////////////////////////////////////////////////
function getConnection(){
return $this->connection;
}
////////////////////////////////////////////////////////////////////
function close(){
MySQLConnect::$instances = 0;
if(isset($this->connection)){
mysql_close($this->connection);
unset($this->connection);
}
}
}//koniec triedy
////////////////////////////////////////////////////////////////////
?>
-
sINN3R
Medium Star
- Príspevky: 330
- Registrovaný: 17 jún 2006, 11:21
- Bydlisko: Trencin - Slovakia - EU
- Kontaktovať používateľa:
takto som to myslel ja (zjednodusene):
Kód: Vybrať všetko
class Database extends mysqli {
protected static $_instance;
protected function __construct() {
$this->connect("localhost","root","vertrigo","localhost");
}
public static function instance() {
if (!self::$_instance) self::$_instance = new self();
return self::$_instance;
}
public function query($sql) {
//tu este osetrim SQL
return parent::query($sql);
}
}
$db = Database::instance();