Промених класа ви, за да работи така, както изглежда го очаквате:
<?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;
}
}
Употреба:
$db = new Database();
$conn = $db->connect();
Имайте предвид, че можете да извикате connect() колкото пъти искате и той ще използва текущата връзка или ще създаде такава, ако не съществува. Това е добро нещо .
Също така, имайте предвид, че всеки път, когатоизграждате инстанция обект на база данни (с помощта на new) ще създавате нова връзка към базата данни. Предлагам ви да разгледате внедряването на вашия клас Database като Singleton или да го съхранявате в Регистър за глобален достъп.
Можете също да го направите по мръсния начин и да го поставите в $GLOBALS.
Редактиране
Позволих си да модифицирам вашия клас, за да внедря модела Singleton и да следвам конвенциите на PHP5 OOP.
<?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);
}
}
Употреба:
$res = Database::getInstance()->query("SELECT * FROM foo;");
или
$db = Database::getInstance();
$db->query("UPDATE foo");
$db->query("DELETE FROM foo");