在ASP.NET中,我可以存儲會話和應用程序狀態。 PHP的情況也是如此嗎?我似乎無法找到有關應用程序狀態的信息。PHP應用程序狀態
如果不是,共享狀態信息的最佳做法是什麼?我需要建立一個有點複雜的數據結構,所有客戶都可以使用。編譯需要一段時間,但編譯後不會編輯。
感謝, 邁克爾
在ASP.NET中,我可以存儲會話和應用程序狀態。 PHP的情況也是如此嗎?我似乎無法找到有關應用程序狀態的信息。PHP應用程序狀態
如果不是,共享狀態信息的最佳做法是什麼?我需要建立一個有點複雜的數據結構,所有客戶都可以使用。編譯需要一段時間,但編譯後不會編輯。
感謝, 邁克爾
PHP沒有任何相當於應用程序狀態。您最好的選擇是在APC或memcache(或Windows服務器上的WinCache)中維護您的數據結構。
雖然PHP沒有內置的應用程序狀態系統,但是如果在構建之後不寫入內容,則可以非常容易地模擬它(如果需要編寫,可以模擬它,但併發問題會使它變得很多很難做到)。
基本上,PHP提供了一個serialize
方法來存儲字符串中的對象。然後,您可以在一個工廠類,構建一個簡單的緩存層將對象存儲在文件系統:
class Factory {
public static function getFooObject() {
$signature = 'foo';
$obj = self::getStoredObject($signature);
if (!$obj) {
$obj = new Foo();
self::storeObject($signature, $object);
}
return $obj;
}
public static function getFooBarObject($arg1) {
$signature = 'foobar_'.md5(serialize($arg1));
$obj = self::getStoredObject($signature);
if (!$obj) {
$obj = new FooBar($arg1);
self::storeObject($signature, $object);
}
return $obj;
}
protected function getStoredObject($signature) {
$path = PATH_TO_CACHE . $signature;
if (file_exists($path)) {
$data = file_get_contents($path);
$obj = @unserialize($data);
return $obj; //Would return false on error, so we're ok
}
return false;
}
protected function storeObject($signature, $obj) {
$path = PATH_TO_CACHE . $signature;
file_put_contents($path, serialize($obj));
}
}
這一切真的是它。如果你想變得有趣,你可以實現一個元數據系統併爲你的類編寫版本,這樣如果你對底層類進行了修改,它會隱式地刷新緩存的對象並重新初始化它。
PHP沒有任何應用程序狀態,但是您可以使用不同的PHP運行時 - Phalanger(http://phalanger.codeplex.com/)。這是PHP到.NET編譯器,並允許您利用大多數.NET功能。其中,您可以定義真正的靜態變量。
class X {
[AppStatic]
static $x;
}
echo X::$x;
當然,你必須照顧關鍵部分的等
我有一個問題關於創建使用會話的應用狀態變量。你能否回顧一下並幫我澄清一下這個問題? http://stackoverflow.com/questions/3760270/could-we-use-session-to-create-a-global-variable-for-all-client – coolkid 2010-09-28 14:41:41