Il costruttore è privato perchè deve poter essere istanziato solo dall'interno della classe stessa, è il principio del Design Pattern Singleton:
http://www.html.it/articoli/design-p...p-singleton-1/
Il problema è che per come è stato fatto il codice, manca il riferimento agli attributi della classe nel costruttore, infatti si potrebbe fare in questo modo:
Codice PHP:
private function __construct( ) {
$this->conn = self::connect( $this->db_host, $this->db_user, $this->db_pass, $this->db_name );
}
Così facendo da qualsiasi parte dell'applicazione si può richiamare
Codice PHP:
Database::getInstance()
in tal modo non occorre passare i parametri e solo la prima volta verrà creata la connessione, dalla seconda volta in poi l'attributo $instance sarà valorizzato e quindi non verrà aperta una nuova connessione.
Ovviamente la classe può essere ampliata con altri metodi, esempio eseguiQuery()
Codice PHP:
public function eseguiQuery($sql) {
return mysql_query($sql,$this->conn);
}
E' quindi semplice capire che si potrà eseguire una query in questo modo:
Codice PHP:
Database::getInstance()->eseguiQuery("SELECT bla bla bla")
Allo stesso modo si potranno aggiungere metodi per il numero di record selezionati, eliminati, per l'ultimo id inserito e così via.
I personalmente per passare i parametri utilizzo delle costanti, ovvero ho il mio file dove specifico i parametri di connessione sotto forma di costanti, es:
Codice PHP:
define('DB_HOST,"localhost");
e nella classe faccio riferimento a queste;
cioè nel getInstance():
Codice PHP:
self::$instance = new $c(DB_HOST, DB_USER...);
quindi il metodo costruttore torna ad avere i parametri:
Codice PHP:
private function __construct( $db_host='', $db_user='', $db_pass='', $db_name='' ) {
$this->conn = self::connect( $db_host, $db_user, $db_pass, $db_name );
}
ed ovviamente andranno tolti gli attributi dalla classe perchè non più utilizzati
Codice PHP:
// Server dove risiede il database
private $db_host = "localhost";
// Username per accedere al database
private $db_user = "root";
// Password per accedere al database
private $db_pass = "";
// Nome del database
private $db_name = "miodatabase";