Jag ändrade din klass till att fungera som du verkar förvänta dig att den ska:
<?php
class Database
{
var $conn = null;
var $config = array(
'username' => 'someuser',
'password' => 'somepassword',
'hostname' => 'some_remote_host',
'database' => 'a_database'
);
function __construct() {
$this->connect();
}
function connect() {
if (is_null($this->conn)) {
$db = $this->config;
$this->conn = mysql_connect($db['hostname'], $db['username'], $db['password']);
if(!$this->conn) {
die("Cannot connect to database server");
}
if(!mysql_select_db($db['database'])) {
die("Cannot select database");
}
}
return $this->conn;
}
}
Användning:
$db = new Database();
$conn = $db->connect();
Observera att du kan anropa connect() så många gånger du vill och den kommer att använda den aktuella anslutningen, eller skapa en om den inte finns. Det här är en bra sak .
Observera också att varje gång du instansierar ett databasobjekt (med nytt) kommer du att skapa en ny anslutning till databasen. Jag föreslår att du överväger att implementera din databasklass som en Singleton eller lagra den i ett register för global åtkomst.
Du kan också göra det på det smutsiga sättet och stoppa in det i $GLOBALS.
Redigera
Jag tog mig friheten att modifiera din klass för att implementera Singleton-mönstret och följa PHP5 OOP-konventionerna.
<?php
class Database
{
protected static $_instance = null;
protected $_conn = null;
protected $_config = array(
'username' => 'someuser',
'password' => 'somepassword',
'hostname' => 'some_remote_host',
'database' => 'a_database'
);
protected function __construct() {
}
public static function getInstance()
{
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
public function getConnection() {
if (is_null($this->_conn)) {
$db = $this->_config;
$this->_conn = mysql_connect($db['hostname'], $db['username'], $db['password']);
if(!$this->_conn) {
die("Cannot connect to database server");
}
if(!mysql_select_db($db['database'])) {
die("Cannot select database");
}
}
return $this->_conn;
}
public function query($query) {
$conn = $this->getConnection();
return mysql_query($query, $conn);
}
}
Användning:
$res = Database::getInstance()->query("SELECT * FROM foo;");
eller
$db = Database::getInstance();
$db->query("UPDATE foo");
$db->query("DELETE FROM foo");