Tôi đã sửa đổi lớp của bạn để hoạt động như bạn có vẻ mong đợi:
<?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;
}
}
Cách sử dụng:
$db = new Database();
$conn = $db->connect();
Lưu ý rằng bạn có thể gọi connect () bao nhiêu lần tùy thích và nó sẽ sử dụng kết nối hiện tại hoặc tạo một kết nối nếu nó không tồn tại. Đây là một điều tốt .
Ngoài ra, hãy lưu ý rằng mỗi lần bạn khởi tạo một đối tượng Cơ sở dữ liệu (sử dụng mới) bạn sẽ tạo một kết nối mới với cơ sở dữ liệu. Tôi khuyên bạn nên xem xét triển khai lớp Cơ sở dữ liệu của mình dưới dạng Singleton hoặc lưu trữ nó trong Sổ đăng ký để truy cập toàn cầu.
Bạn cũng có thể làm điều đó theo cách bẩn thỉu và đẩy nó vào $ GLOBALS.
Chỉnh sửa
Tôi đã tự do sửa đổi lớp của bạn để triển khai mẫu Singleton và tuân theo các quy ước 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);
}
}
Cách sử dụng:
$res = Database::getInstance()->query("SELECT * FROM foo;");
hoặc
$db = Database::getInstance();
$db->query("UPDATE foo");
$db->query("DELETE FROM foo");