2010-08-20 44 views
1

我想停止PHP中類「OzoneRequest」和「OzoneResponse」的用戶創建對象。在OzoneApplication的構造函數中只創建一個對象。我該怎麼做?可能是你明白我的問題我們如何停止PHP中類的用戶創建對象?

我沒有用戶希望對象的創建只有我創建了一個對象存在的對象。如果用戶要創建的對象,那麼這將無法執行......這會給出一個錯誤......

回答

3

做一個私有構造函數,然後從類中的一個靜態方法調用它來創建你的一個對象。另外,查詢單身人士的設計模式。

1

這將是一個Singleton的用例。

但是,我沒有看到限制用戶(閱讀:開發人員)的要點,如果他不想創建請求或響應對象。即使概念上只有一個請求對象(這是有爭議的;如果我需要針對遠程服務分派多個請求會怎麼樣),問題是:爲什麼你禁止開發人員更改你的代碼?我是一個成年人。如果我想打破你的代碼,讓我打破它。

還要注意的是,時下Singleton pattern is widely regarded an Anti-Pattern

+0

我嘗試開發一個MVC框架我大學的專業項目,我稱其爲OZONE_MVC(http://code.google.com/p/ozonemvc/),在此當請求來自客戶端,然後框架本身創建了一個可能必須是唯一的請求和響應對象。用戶僅使用該對象。它在初始階段..... – user421336 2010-08-20 16:46:44

+0

@user爲什麼他們必須是唯一的?您如何期待*用戶*創建第二個請求或響應?我的意思是,*用戶*無法訪問您的代碼。 – Gordon 2010-08-20 16:51:05

2
class OzoneRequest 
{ 
private static $instance = null; 

private function __construct() { } 

private function __clone() { } 

public static function getInstance() 
{ 
    if (!isset(self::$instance)) { 
    self::$instance = new OzoneRequest(); 
    } 
    return self::$instance; 
} 

} 

class OzoneApplication 
{ 
    protected $req; 

    public function __construct() 
    { 
    $this->req = OzoneRequest::getInstance(); 
    } 

} 
+0

由於這在技術上是一個正確的解決方案,所以我會加倍努力。道德上它是一個不同的故事;) – Gordon 2010-08-20 16:57:04

相關問題