2010-03-18 84 views
11

在ASP.NET中,如果我聲明一個變量(或對象)是靜態的(或者如果我創建一個單例),我可以讓它在多個用戶的多個會話中持久化(它在服務器中註冊範圍),這樣我就不必每次請求都初始化它。會話中的靜態變量

在PHP中有這樣的功能嗎?謝謝

+0

這是Redis的用例嗎? – pbarney 2016-08-18 03:10:10

回答

2

你可以用PHP擴展(用C語言編寫)做到這一點。

但是,如果你想在PHP中寫它,沒有。最好的選擇是在每個請求的末尾將變量寫入文件(file_put_contents()),並在每個請求(file_get_contents())的開始處將其打開。

該替代方案不適用於大容量網站,因爲這些流程將同時進行讀/寫操作,並且全球將全部採用BLAAA-WOOO-EEE-WOHHH-BOOOM。

+8

+1爲您準確描述世界末日。 :P – DrFriedParts 2012-12-30 06:41:58

0

不幸的是,沒有。 PHP的static關鍵字僅限於當前腳本實例。

要在同一會話的腳本實例中保存數據,您可以使用session handling功能。

要在會話間持續保存數據,您必須使用類似memcache的內容,但這需要在服務器端進行額外的設置工作。

0

你可以存儲對象的序列化副本內部會議

 
class test{ 
    private static $instance; 
    public property; 
    private __construct(){} 
    public getInstace(){ 
    if(!self::$instance){ 
     self::$instance = new test; 
    } 
    return self::$instance; 
    } 
} 

$p = test->getInstance(); 
$p->property = "Howdy"; 
$_SESSION["p"] = $p; 

下一頁

 
$p = $_SESSION["p"]; 
echo $p->property; // "Howdy" 
+1

IMO僅在同一會話的頁面之間共享變量:對於多個會話或多個用戶之間的共享無關緊要。 – T30 2015-02-10 08:22:35

+0

是一個古老的答案,現在我會推薦編寫一個模塊,有很多選項,比如C或C++,用於輕鬆編寫已編譯的共享模塊。 – markcial 2015-02-10 08:56:14

4

這doesn't在PHP中存在,但是,你可以序列化的數據,並把它無論是在您的硬盤驅動器上的文件或在的/ dev/shm的/。您也可以使用memcache。

如果你把你的數據的/ dev/shm的/或使用內存緩存數據會消失在重新啓動。