php中的全局数组

时间:2010-12-11 09:04:54

标签: php arrays global-variables

我必须在两个不同的文件中运行。 其中一个应该在每次调用时向数组添加一个新项目,并且数组应该是可访问的。我为它做的是:

function1(){

   global $array;

   $array[] = 'hi';

}

但它只是在数组中创建了一个项目,即使我将此函数调用了4次。

3 个答案:

答案 0 :(得分:11)

你做了什么应该工作。

<?php

function function1(){

   global $array;

   $array[] = 'hi';

}
function1();
function1();
function1();
print_r($array);

Test it.

你可能还有另外一个问题。请注意,所有变量的生命周期都是脚本的当前运行。它们不会连续存在。为此,您需要使用某种持久性,如会话,cookie,文件系统,数据库。

如需更多帮助,请发布完整代码。

答案 1 :(得分:5)

我对你问题的措辞感到有些困惑。当你说“我必须在两个不同的文件中运行”时。你的意思是说你有“两个”功能吗?

如果您有两个函数都试图使用$ array变量,则需要在两个函数中调用global $array;

原因是global有点误导。所有它真正做的是将$_GLOBALS成员的引用分配给本地作用域中与$ _GLOBALS索引同名的变量。换句话说,如果你这样做:

 global $variable;

这与说这个基本相同:

 $variable =& $_GLOBALS['variable'];   (assign by reference)

实际变量$variable仍然是功能级别的范围,它恰好具有对全局变量的引用。

这意味着如果你没有在每个函数中定义global $variable,那么你只需要在该函数的范围内创建一个全新的变量。当函数结束时,变量将被取消设置,并且函数内的任何更改都将丢失。

尽管如此,全局变量仍然是一个坏主意。如果你只是维护一个局部变量,并在需要时将它作为参数传递给其他函数,那就更清楚了。

答案 2 :(得分:0)

我的问题是函数中不知道全局$ array。但是当我放置第一个def时:$ array = array();在第一个函数调用之前,它起作用了。