單例模式(Singleton Pattern)是一種常用的軟件設計模式,其目標是確保一個類只有一個實例,并提供一個全局訪問點來獲取該實例。在 PHP 中,單例模式通常用于數據庫連接,以確保在整個應用程序中只有一個數據庫連接實例。這樣可以節省資源,提高性能。
以下是一個使用單例模式的 PHP 數據庫連接類示例:
class DatabaseConnection {
private static $instance; // 存儲唯一實例的屬性
private $connection; // 存儲數據庫連接的屬性
// 私有構造函數,防止外部實例化
private function __construct() {
$this->connection = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
}
// 公共靜態方法,用于獲取唯一實例
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new DatabaseConnection();
}
return self::$instance;
}
// 私有克隆方法,防止克隆實例
private function __clone() {}
// 公共方法,用于執行 SQL 查詢
public function query($sql) {
return $this->connection->query($sql);
}
}
在這個示例中,我們創建了一個名為 DatabaseConnection
的類,它包含一個私有構造函數、一個私有克隆方法和一個公共靜態方法 getInstance()
。getInstance()
方法負責創建并返回唯一的 DatabaseConnection
實例。當需要訪問數據庫時,可以通過調用 DatabaseConnection::getInstance()
來獲取唯一的數據庫連接實例。
以下是如何在應用程序中使用此單例數據庫連接類的示例:
// 獲取數據庫連接實例
$db = DatabaseConnection::getInstance();
// 執行 SQL 查詢
$result = $db->query("SELECT * FROM users");
// 處理查詢結果
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo "User ID: " . $row['id'] . "<br>";
echo "User Name: " . $row['name'] . "<br><br>";
}
在這個示例中,我們首先通過調用 DatabaseConnection::getInstance()
獲取數據庫連接實例。然后,我們使用 query()
方法執行 SQL 查詢并處理查詢結果。由于我們使用了單例模式,因此在整個應用程序中只會存在一個數據庫連接實例,從而節省資源并提高性能。