2012-01-21 39 views
3

我开发了一个像这样的全局变量的PHP页面;如何在整个应用程序中设置一个全局变量

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

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

我在antother PHP页面上调用了一个函数来显示它的数量,并用这种方法将一些元素放到这个全局数组中;

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

但在每次刷新首先,它显示计数0,则1

我怎样才能坚持横跨整个应用程序的全局变量的值。

+0

我不想将它放入会话中,因为会话变量应该在用户级别范围不是应用程序级别时设置。 –

+0

PHP中的“全局”变量[并不是真的](http://stackoverflow.com/questions/1557787/are-global-variables-in-php-considered-bad-practice-if-so-why/1557799# 1557799)应用程序持久性。它们只存在一次调用。使用会话。 – mario

+0

PHP让我失望:( –

回答

3

你不能真正坚持跨页执行变量而不将它们保存到某个持久存储区。

如果你需要存储一个变量仅适用于特定的用户,使用session_start();,然后使用$_SESSION;

如果它是为整个应用程序使用会话,你应该考虑使用一个数据库或数据保存到一个文件。如果保存到文件中,请检出serialize()unserialize(),这样可以将变量的状态存储为文本表示。

2

你有什么问题。

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

要在功能使用全局变量和改变其值在函数

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

使用global - 关键字但这存储仅是每一个请求。如果你想存储的东西不再使用sessiondatabasefile

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,并将其存储(默认)到饼干)。

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

+0

我使用相同的正如你在第一段中提到的那样,我猜它是静态的,它也不能解决我的问题,session不是我的问题,我不想用数据库。 –

+0

@articlestack There's用'serialize'和'unserialize'回答,我认为你应该使用它,或者使用数据库通用数据库方法并加载:) – Vyktor

1

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

4

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

+2

你能给我一个简单的例子或者参考吗?谢谢 –

0

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

0

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

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

提会话的开始在你想设置的变量的页面,然后你可以利用它在同一页上,如下所示:

<?php 
    //.....your code 
    $variable=$_SESSION['variable']; 
    //....your code 
    //always remember the destroy the session after the use of it 
    session_destroy(); 
    ?> 
相关问题