單例模式(Singleton Pattern)是一種常用的軟件設計模式,其目的是確保一個類只有一個實例,并提供一個全局訪問點。在 PHP 項目中,單例模式通常用于管理數(shù)據(jù)庫連接、配置文件、日志記錄等需要全局訪問的資源。以下是一個實際應用案例:
假設我們正在開發(fā)一個 PHP 應用程序,需要連接到 MySQL 數(shù)據(jù)庫。為了提高性能和資源利用率,我們可以使用單例模式來確保整個應用程序中只有一個數(shù)據(jù)庫連接實例。
首先,我們創(chuàng)建一個名為 DatabaseConnection
的類,用于封裝數(shù)據(jù)庫連接邏輯。
class DatabaseConnection {
private static $instance = null;
private $connection;
private function __construct() {
// 連接數(shù)據(jù)庫的邏輯
$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;
}
public function getConnection() {
return $this->connection;
}
}
在這個類中,我們使用了私有構造函數(shù)來防止外部直接創(chuàng)建新的實例。getInstance
方法用于獲取唯一的實例,如果實例尚未創(chuàng)建,則會創(chuàng)建一個新實例。getConnection
方法用于獲取底層的數(shù)據(jù)庫連接對象。
接下來,我們在應用程序的其他部分使用 DatabaseConnection
單例來獲取數(shù)據(jù)庫連接。
// 獲取數(shù)據(jù)庫連接實例
$db = DatabaseConnection::getInstance();
// 使用連接執(zhí)行查詢
$stmt = $db->getConnection()->prepare("SELECT * FROM users");
$stmt->execute();
// 處理查詢結果
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
通過這種方式,無論我們的應用程序有多少個部分需要訪問數(shù)據(jù)庫,都只會創(chuàng)建一個 DatabaseConnection
實例,從而節(jié)省了資源并提高了性能。