Mysql pripojenie medzi triedami

Programovacie jazyky, rady, poradňa...
sINN3R
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 330
Registrovaný: 17 jún 2006, 11:21
Bydlisko: Trencin - Slovakia - EU
Kontaktovať používateľa:

Mysql pripojenie medzi triedami

Príspevok od používateľa sINN3R »

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 ?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

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
Medium Expert
Používateľov profilový obrázok
Príspevky: 108
Registrovaný: 23 sep 2009, 9:32
Bydlisko: Dark Side of The Moon
Kontaktovať používateľa:

Príspevok od používateľa __construct »

Ja to má spravené tiež tak, že môže byť iba jedna inštancia:
<?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
////////////////////////////////////////////////////////////////////
?>
a potom triedu s ResultSetom ..
sINN3R
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 330
Registrovaný: 17 jún 2006, 11:21
Bydlisko: Trencin - Slovakia - EU
Kontaktovať používateľa:

Príspevok od používateľa sINN3R »

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();
Napísať odpoveď