在ASP.NET中,如果我聲明一個變量(或對象)是靜態的(或者如果我創建一個單例),我可以讓它在多個用戶的多個會話中持久化(它在服務器中註冊範圍),這樣我就不必每次請求都初始化它。會話中的靜態變量
在PHP中有這樣的功能嗎?謝謝
在ASP.NET中,如果我聲明一個變量(或對象)是靜態的(或者如果我創建一個單例),我可以讓它在多個用戶的多個會話中持久化(它在服務器中註冊範圍),這樣我就不必每次請求都初始化它。會話中的靜態變量
在PHP中有這樣的功能嗎?謝謝
你可以用PHP擴展(用C語言編寫)做到這一點。
但是,如果你想在PHP中寫它,沒有。最好的選擇是在每個請求的末尾將變量寫入文件(file_put_contents()),並在每個請求(file_get_contents())的開始處將其打開。
該替代方案不適用於大容量網站,因爲這些流程將同時進行讀/寫操作,並且全球將全部採用BLAAA-WOOO-EEE-WOHHH-BOOOM。
+1爲您準確描述世界末日。 :P – DrFriedParts 2012-12-30 06:41:58
不幸的是,沒有。 PHP的static
關鍵字僅限於當前腳本實例。
要在同一會話的腳本實例中保存數據,您可以使用session handling功能。
要在會話間持續保存數據,您必須使用類似memcache的內容,但這需要在服務器端進行額外的設置工作。
你可以存儲對象的序列化副本內部會議
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"
您可以設置APC和使用apc_store和apc_fetch功能。
這doesn't在PHP中存在,但是,你可以序列化的數據,並把它無論是在您的硬盤驅動器上的文件或在的/ dev/shm的/。您也可以使用memcache。
如果你把你的數據的/ dev/shm的/或使用內存緩存數據會消失在重新啓動。
這是Redis的用例嗎? – pbarney 2016-08-18 03:10:10