單例模式的存在在一些情況下是比較有意義的,如BlogEngine的站點配置就是采用的單例模式,而且它的載入和保存的代碼是相當經典的,有興趣可以看看它的源代碼。
由於ASP.Net是編譯型的,所以單例一直會存在於這個應用程序的生命周期裡,真正可以做到這個實例在應用程序生命周期中的唯一性。
PHP的單例模式的實現大致如下:
class Stat{
static $instance = NULL;
static function getInstance(){
if(self::$instance == NULL){
self::$instance = new Stat();
}
return self::$instance;
}
private function __construct(){
}
private function __clone(){
}
function sayHi(){
return "The Class is saying hi to u ";
}
}
echo Stat::getInstance()->sayHi();
class Stat{
static $instance = NULL;
static function getInstance(){
if(self::$instance == NULL){
self::$instance = new Stat();
}
return self::$instance;
}
private function __construct(){
}
private function __clone(){
}
function sayHi(){
return "The Class is saying hi to u ";
}
}
echo Stat::getInstance()->sayHi();
但,PHP是一種解釋型的語言,在這裡用單例好像看不出實際的用處,一旦整個頁面執行完,變量也就消失了。
static function getInstance(){
if(self::$instance == NULL){
self::$instance = new Stat(); //這裡隨著頁面的重載會再次執行
}
return self::$instance;
}
static function getInstance(){
if(self::$instance == NULL){
self::$instance = new Stat(); //這裡隨著頁面的重載會再次執行
}
return self::$instance;
}
我接觸PHP時間不長,以上寫出來的只是在C#與PHP二種不同語言環境下對單例模式的認知,也許這個例子只是為了說明模式可以用很多種語言來實現,但並不意味著在各種語言環境下都能真正起作用。
ASP.Net中的單例是在整個應用程序域唯一。PHP中的單例只在整個頁面周期內唯一