如何在整个应用程序中设置可访问的全局变量

时间:2012-01-21 11:29:34

标签: php global-variables

我用这样的全局变量开发了一个PHP页面;

global $amty_imgCache; $amty_imgCache = array();
$GLOBALS["amty_imgCache"]=$amty_imgCache;

此页面具有向/从此阵列添加/删除条目的功能。

我在另一个PHP页面上调用了一个函数来显示它的计数并以这种方式将一些元素放入这个全局数组中;

Count <?php echo amty_getImageCacheCount(); ?>
<?php amty_putIntoImageCache(100,0); ?>
Count <?php echo amty_getImageCacheCount(); ?>

但是在每次刷新时它首先显示计数0然后是1.

如何在整个应用程序中保留全局变量的值。

7 个答案:

答案 0 :(得分:5)

使用APC或memcache存储此类值。您不仅可以从任何页面访问这些值,还可以从任何服务器访问这些值。

答案 1 :(得分:3)

你不能在页面执行中保留变量而不将它们保存到某个持久存储中。

如果您只需要为特定用户存储变量,请使用session_start();使用会话,然后使用$_SESSION;

如果是整个应用程序,您应该考虑使用数据库或将数据保存到文件。如果保存到文件,请结帐serialize()unserialize(),这样您就可以将变量的状态存储到文本表示中。

答案 2 :(得分:2)

你错了。

函数或类外的php中的所有变量都是全局变量!

要在函数中使用全局变量并更改其值,请使用global - 函数中的关键字

$amty_imgCache = array();
$amty_imgCache[] ="my_first_img.png";
function amty_getImageCacheCount() {
    global $amty_imgCache;
    echo "count is:" ,count($amty_imgCache);
}

但是这个存储只能按一个请求进行。如果您想要存储更长时间,请使用sessiondatabasefile

答案 3 :(得分:1)

PHP没有任何应用程序级别的持久性。您可能希望查看Memcache以获得最快的解决方案(当然,如果您可以安装它)。

答案 4 :(得分:0)

首先,当你在函数中使用全局变量时,你应该使用global$GLOBALS,而不是两者。所以看起来应该是这样的:

function amty_putIntoImageCache( $i, $j){
    global $amty_imgCache;
    $amty_imgCache[ $i] = $j;
}

第二,你为什么不使用静态类而不是全局变量?正确的设计是静态类使用,例如:

class amty {
    static protected $images = array();

    static public function put( $i, $j){
        self::$images[$i] = $j;
    }
}
amty::put( 100,0);

并且(我相信这就是你所问的),当你想在每个页面上的整个应用程序中使用全局变量时(这意味着在重新加载后)你应该使用:

session_start() // Be careful to use this just once
$_SESSION['variable'] = 'This value will persist as long as session lives';

每个用户/一个连接存在会话(php生成会话ID并将其(默认情况下)存储到cookie中)。

如果您确实需要通过整个应用程序访问数据,则应使用数据库或文件存储。

答案 5 :(得分:0)

虽然我认为这里的大多数答案都是合适的,但我觉得它们不够完整。 PHP肯定只有应用程序范围的持久性,只需要将这些变量构建到PHP本身或者在Web服务器首次加载PHP时加载的模块。这意味着扩展和重建PHP本身或至少构建和加载外部模块。

答案 6 :(得分:0)

您可以使用PHP会话。会话变量是超级全局变量,可以在任何地方访问,直到您销毁会话。 您只需要通过

提及会话的开始
switch(test.getStatus()) {

     case FILE : 
            fullList.addAll(getFileMensionList(session, search, authUser));
            break;
     case EVENT :
            fullList.addAll(getEventMensionList(session, search, authUser));
            break;
     case POLL :
            fullList.addAll(getPollMensionList(session, search, authUser));
            break;
     case PROJECT :
            fullList.addAll(getProjectMensionList(session, search, authUser));
            break;
     case TASK :
            fullList.addAll(getTaskMensionList(session, search, authUser));
            break;
}

在页面上你想设置变量,然后你可以在同一页面上使用它,如下所示:

    <?php
    session_start();
    //...your code
    $_SESSION['variable']=$variable;
    //....your code
    ?>