php的單例模式和java單例模式的比較
PHP語言是一種解釋型的腳本語言,這種運行機制使得每個PHP頁面被解釋執(zhí)行后,所有的相關資源都會被回收。也就是說,PHP在語言級別上沒有辦法讓某個對象常駐內存,這和asp.net、Java等編譯型是不同的,比如在Java中單例會一直存在于整個應用程序的生命周期里,變量是跨頁面級的,真正可以做到這個實例在應用程序生命周期中的唯一性。然而在PHP中,所有的變量無論是全局變量還是類的靜態(tài)成員,都是頁面級的,每次頁面被執(zhí)行時,都會重新建立新的對象,都會在頁面執(zhí)行完畢后被清空,這樣似乎PHP單例模式就沒有什么意義了,所以PHP單例模式我覺得只是針對單次頁面級請求時出現(xiàn)多個應用場景并需要共享同一對象資源時是非常有意義的。
代碼實現(xiàn)
class DB
{
private $_db;
private static $_instance; // 需要一個保存類的唯一實例的靜態(tài)成員變量
private function __construct(...)
{
$this->_db = pg_connect(...); // 構造函數(shù)和克隆函數(shù)必須聲明為私有的,防止外部程序new類從而失去單例模式的意義
}
private function __clone() {}; // 覆蓋__clone()方法,禁止克隆
public static function getInstance()
{
if(! (self::$_instance instanceof self) ) {
self::$_instance = new self();
}
return self::$_instance;
}
public function addUserInfo(...)
{
}
public function getUserInfo(...)
{
}
}