PHP应用程序状态

PHP应用程序状态,php,state,Php,State,在ASP.NET中,我可以存储会话和应用程序状态。PHP也是如此吗?我似乎找不到有关应用程序状态的信息 如果没有,共享状态信息的最佳实践是什么?我需要构建一个稍微复杂的数据结构,所有客户端都可以使用它。它需要一段时间来构建,但在构建之后永远不会被编辑 谢谢, MichaelPHP没有任何与应用程序状态等价的属性。最好的选择是在APC或memcache(或Windows服务器上的WinCache)中维护您的数据结构。虽然PHP没有内置的应用程序状态系统,但如果在构建后不编写,您可以非常轻松地模拟一

在ASP.NET中,我可以存储会话和应用程序状态。PHP也是如此吗?我似乎找不到有关应用程序状态的信息

如果没有,共享状态信息的最佳实践是什么?我需要构建一个稍微复杂的数据结构,所有客户端都可以使用它。它需要一段时间来构建,但在构建之后永远不会被编辑

谢谢,
Michael

PHP没有任何与应用程序状态等价的属性。最好的选择是在APC或memcache(或Windows服务器上的WinCache)中维护您的数据结构。

虽然PHP没有内置的应用程序状态系统,但如果在构建后不编写,您可以非常轻松地模拟一个应用程序状态系统(如果需要编写,您可以模拟它,但并发性问题将使其更难正确完成)

基本上,PHP提供了一个
serialize
方法来以字符串形式存储对象。然后,您可以在factory类中构建一个简单的缓存层来将对象存储在文件系统上:

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运行时-版本()。它是PHP到.NET编译器,允许您利用.NET的大部分功能。除此之外,您还可以定义真正的静态变量

class X {
    [AppStatic]
    static $x;
}
echo X::$x;

当然,您必须注意关键部分等。

我有一个关于使用会话创建应用程序状态变量的问题。您能回顾一下并帮助我澄清问题吗?