2011-08-13 61 views
0

我有一种情况,我需要维护一个静态变量全局值,它可以通过改变不同的PHP文件。php静态变量没有设置

下面我有课,

<?php 
class FlagMe { 
    public static $flag; 

    public static function setFlag($flag) { 
     self::$flag = $flag; 
    } 

    public static function getFlag() { 

     return self::$flag; 
    } 
} 
?> 

而且我设置从diferent PHP文件类似下面的值,

FlagMe::setFlag("SomeValue"); 

但在相同的PHP脚本POST请求码流后假设(控制器类)与页面刷新,当我尝试访问该静态变量时,它给了我而不是先给定设置值“SomeValue”。

$temVar = FlagMe::getFlag(); // gives null 

我在这里错过了什么?

谢谢。

回答

3

页面刷新后,会发生脚本的新执行。对象实例/类变量不保存在不同的执行之间。

如果您希望保存一个变量,请将其存储在sessioncookie中。然后,在每次执行时检查会话并相应地设置变量。

0
$tempVar = FlagMe::setFlag("SomeValue"); 

是错误的,因为setFlag函数没有返回任何值。 您只能使用FlagMe::setFlag("SomeValue");

尝试将回声"setFlag value is ".$flag添加到setFlag以查看标记发生了什么。

无论如何,我认为你的问题是刷新数据更改后。您必须使用会话来在页面之间存储信息。

+0

这不是问题 –

3

两个请求表示脚本的两次执行和两个不同的内存空间。在第一个请求结束时,第一个脚本结束,并且它在内存中所做的所有更改都将被遗忘。第二个脚本从头开始,所有变量都有其默认值。

如果变量链接到当前用户,则应将其存储在会话中。否则,您应该将其存储在文件或数据库中。

4

HTTP是一种无状态协议,这意味着用户的数据不会保存在页面请求之间。

如果您想要在多个页面上保存变量,您应该使用会话或cookie。

+4

这与HTTP无状态无关。这与PHP每个请求有一个进程有关。例如,在Java Web应用程序中,所有请求都使用相同的过程,并且此代码可以工作。 –

+0

啊,好的。不知道:) – maartencls