鞏固評論中的變化,用我自己的。不是依賴常量,而是將變量傳遞給getInstance /構造函數,以便您可以以任何您想要的方式存儲憑據,並將它們饋送到類中,而不必依賴於以某種方式存儲的數據。增加了一點靈活性。
你也可以將它與代碼交換,從配置文件讀取它們,或者從服務定位器類型模式中獲取數據。
Class MysqlConnection {
private static $instance = null;
private function __construct() {
self::$instance = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_DATABASE);
}
public static function getInstance() {
if (!isset(self::$instance)) {
$credentials = self::getCredentials();
self::$instance = new MysqlConnection();
}
return self::$instance;
}
}
function __clone() {
//Throw exception/custom exception type here.
}
}
編輯點評:這個想法是因爲是階級這裏不是勾勒一個完全100%使用,但是代表我的立場和態度這一點。憑證位不是100%必需的,它只是我覺得讓它更靈活一些,而不是將其編碼爲僅使用CONSTANTS等。這可能會從初始點分散注意力,這是單身人士看起來的樣子。我對這種混亂表示歉意。
您也可以嘗試永久連接。 – hjpotter92
如果(!isset(self :: $ intance)){'to'if(!isset(self :: $ instance)){''除非是拼寫錯誤。 –
對於單例使用情況已經足夠了,如果您需要強制實現獨特性,您還可以使構造函數保持私有狀態,並在'__clone()'中引發異常,但是,就是這樣。如果你不需要執行它,你甚至可以使用一個帶有'static'變量的正常函數,避免需要類變量/可能直接訪問它。 – Wrikken