Saya memodifikasi kelas Anda agar berfungsi seperti yang Anda harapkan:
<?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;
}
}
Penggunaan:
$db = new Database();
$conn = $db->connect();
Perhatikan bahwa Anda dapat memanggil connect() sebanyak yang Anda suka dan itu akan menggunakan koneksi saat ini, atau membuatnya jika tidak ada. Ini adalah hal yang baik .
Perhatikan juga bahwa setiap kali Anda membuat instance objek Database (menggunakan baru) Anda akan membuat koneksi baru ke database. Saya sarankan Anda melihat penerapan kelas Database Anda sebagai Lajang atau menyimpannya di Registry untuk akses global.
Anda juga dapat melakukannya dengan cara kotor dan memasukkannya ke dalam $GLOBALS.
Sunting
Saya mengambil kebebasan untuk memodifikasi kelas Anda untuk mengimplementasikan pola Singleton, dan mengikuti konvensi 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);
}
}
Penggunaan:
$res = Database::getInstance()->query("SELECT * FROM foo;");
atau
$db = Database::getInstance();
$db->query("UPDATE foo");
$db->query("DELETE FROM foo");