PHP静态成员没有持有值

时间:2011-08-27 20:23:17

标签: php static reset

嗨,我正在写一个WordPress插件的奇怪问题,但这不是关于WordPress本身,而是更多与PHP有关,所以请继续阅读,以便我可以解释。连接WordPress插件,以便调用init()函数...这可以确认它被调用一次。

class MyClass
{
   static $i=0;

   public static function init()
   {
     self::$i++;
   }

   public static function dosomething()
   {
     echo 'i is = ' . self::$i;
   }
}

第一次从Wordpress中调用callinf dosomething()时就可以了。然后我有另一个ajax-response.php文件,其中包含上面的类并再次调用dosomething,它打印i值= 1.

问题是通过ajax-response.php脚本调用时的i值是否回到0?

它好像在一个完全不同的内存空间中执行并创建一个新程序,这样静态成员变量只在同一个进程之间共享,而不是多个Web线程。

有什么想法吗?

提前致谢,

克里斯

4 个答案:

答案 0 :(得分:2)

  

它好像在一个完全不同的内存空间中执行并创建一个新程序,这样静态成员变量只在同一进程之间共享,而不是多个Web线程。

完全! :)这是100%这是如何工作的。每个PHP请求都是一个新的,具有自己的内存。 static关键字并非旨在解决此问题。

如果要在Web应用程序中跨多个进程/请求保留内容,则需要使用sessions

答案 1 :(得分:1)

Ajax请求是另一个请求。这就是新变量的原因 您可以使用会话在请求之间存储值

答案 2 :(得分:1)

您可能需要此会话。变量仅存储在当前实例中,因此如果您调用另一个脚本并创建MyClass类的实例,则其所有属性都将设置为默认值。

答案 3 :(得分:1)

这是正确的,你的变量不会在不同的进程之间保持活跃。每个进程都有自己的变量副本。你有很多选择。

如果您希望将变量作为短期存储,则可以在会话中使用存储变量。如果要无限期地存储它,则应将其存储在数据库或文件中。