2011-12-14 50 views
2

我寫了一個類,每次有客戶端請求到服務器時在頁面中構建一些URL。在假設的情況下,100個客戶端同時需要服務器連接,它應該產生100個該類的實例,對吧? 所以我想知道在頁面上同時有多個實例的結果是什麼,如果這是一個很好的實踐來解決我的問題與「網址生成器」。 謝謝每個客戶端請求都是該類的新實例?

[編輯] 我試圖做的是使用__set()方法和重載來建立網址。事實是,我開始在PHP中研究面向對象的編程,並且我想嘗試這種方法的實際應用。這裏是一段代碼:

Class BuildPath { 

    private $ServerPath; 
    private $ServerUrl; 
    private $UrlPath; 
    private $data; 

    function __construct() 
    { 
     $this->ServerPath = $_SERVER['DOCUMENT_ROOT']; 
     $this->ServerUrl = $_SERVER['HTTP_HOST']; 
     $this->UrlPath = $_SERVER['REQUEST_URI']; 
     $this->data = array(); 
    } 

    public function __get($key) { 
      return $this->$key; 
    } 

    public function __set($key,$value) 
    { 
     $this->data[$key] = $value; 
    } 

    // others methods 
+0

你可能會開始發佈一些代碼讓人們看看... – rdlowrey 2011-12-14 20:52:55

+0

你可能需要編輯這個,所以它更清楚你的目標是什麼。在我閱讀它時,每個客戶端請求都與站點上的任何其他訪問者沒有什麼不同,它們實例化程序員告訴它的任何類。你是否問過要求重載服務器?我們不知道你甚至對「url生成器」有問題,所以我們不能告訴你任何關於上述問題是否可以解決的問題。 – 2011-12-14 20:55:47

+0

@anemi我認爲你需要花點時間爲我們澄清問題。這是真的不清楚你的意思是我的「網址生成器」。也許定義你想要解決的問題將是一個好的步驟。 – hafichuk 2011-12-14 22:14:26

回答

2

閱讀了一些評論後,我認爲你誤解了什麼是PHP,而不是。每當用戶向頁面發出請求時,就會按照您的說法「創建實例」。加載頁面後,「實例」被刪除。這就是PHP的工作原理。

單例類不會與一個用戶實例與另一個用戶實例共享數據,而是將該類的用戶與另一個類的相同用戶實例共享。

這是PHP如何操作並且是正常的。由於php不會在每個請求之間「存儲」數據,這就是memcache或mysql開始使用或會話的地方。

2

有一點需要注意的是PHP沒有應用程序範圍,這意味着請求之間沒有共享內存。數據庫(mysql)或內存存儲(memcache)通常用於共享請求之間的對象狀態。一般來說,向網絡服務器發出的每個請求都會生成一個新的類實例,但每個類只會意識到它自己的狀態,除非您有共享它的機制。

相關問題