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