嗨,我正在写一个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线程。
有什么想法吗?
提前致谢,
克里斯
答案 0 :(得分:2)
它好像在一个完全不同的内存空间中执行并创建一个新程序,这样静态成员变量只在同一进程之间共享,而不是多个Web线程。
完全! :)这是100%这是如何工作的。每个PHP请求都是一个新的,具有自己的内存。 static
关键字并非旨在解决此问题。
如果要在Web应用程序中跨多个进程/请求保留内容,则需要使用sessions。
答案 1 :(得分:1)
Ajax请求是另一个请求。这就是新变量的原因 您可以使用会话在请求之间存储值
答案 2 :(得分:1)
您可能需要此会话。变量仅存储在当前实例中,因此如果您调用另一个脚本并创建MyClass类的实例,则其所有属性都将设置为默认值。
答案 3 :(得分:1)
这是正确的,你的变量不会在不同的进程之间保持活跃。每个进程都有自己的变量副本。你有很多选择。
如果您希望将变量作为短期存储,则可以在会话中使用存储变量。如果要无限期地存储它,则应将其存储在数据库或文件中。