嗨,我正在编写的 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 中调用 inf dosomething() 时,一切正常。然后我有另一个 ajax-response.php 文件,其中包含上述类,并再次调用 dosomething,它打印 i 值 = 1。
问题是通过ajax-response.php脚本调用时i值又回到0了?
就好像它在完全不同的内存空间中执行并创建一个新程序,这样静态成员变量仅在同一进程之间共享,而不是在多个 Web 线程之间共享。
有什么想法吗?
提前致谢,
克里斯
最佳答案
Its as if it is executing in a totally different memory space and creating a new program, such that static member variables are only shared between same process as opposed to multiple web threads.`
正是如此! :) 100% 就是这样工作的。每个 PHP 请求都是一个新请求,有自己的内存。 static
关键字并不是为了解决这个问题而设计的。
如果您想在 Web 应用程序中跨多个进程/请求持久保存内容,则需要使用 sessions .
关于PHP静态成员不保值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217121/