php中的全局变量问题

php中的全局变量问题,php,Php,可能重复: 我有一个从数据库读取数据的函数。我有一个数组,我想把数据库中的数据放入其中,以便于操作。我在函数外部定义数组,并在调用函数时填充它 $rid = ""; if(isset($_GET['rid'])){ $rid = $_GET['rid']; } $dates = array(); function getData($rid){ //Db Connection Strings //Query stuff etc //DATES for ($i=0;

可能重复:

我有一个从数据库读取数据的函数。我有一个数组,我想把数据库中的数据放入其中,以便于操作。我在函数外部定义数组,并在调用函数时填充它

$rid = "";
if(isset($_GET['rid'])){
  $rid = $_GET['rid'];
}

$dates = array();    
function getData($rid){
  //Db Connection Strings
  //Query stuff etc

  //DATES
  for ($i=0; $i < 5; $i++) { 
    $mil = (float)$query->table->records->record->f[$i];
    $seconds = $mil / 1000;
    $dt = gmdate('m-d-Y', $seconds);

    $dates[$i] = $dt;
  }  
  print_r($dates);//THIS WORKS
}

getData($rid);
print_r($dates);//THIS DOESN'T
$rid=”“;
如果(isset($_GET['rid'])){
$rid=$_GET['rid'];
}
$dates=array();
函数getData($rid){
//数据库连接字符串
//查询资料等
//日期
对于($i=0;$i<5;$i++){
$mil=(浮动)$query->table->records->record->f[$i];
$seconds=$mil/1000;
$dt=gmdate('m-d-Y',$s);
$dates[$i]=$dt;
}  
print_r($dates);//这很有效
}
getData($rid);
打印(日期)//这并不重要
我的问题是:除非我在函数中调用referent$dates,否则它不会吐出我的数据。我需要在函数外部执行此操作,以便在运行时将值放入文本字段


如何将我的值放入$dates数组中,以便全局使用?谢谢

有三种基本方法可以做到这一点:通过引用传递数组、全局调用数组以及从函数返回数组

function getData($rid){
   //Do whatever you need to do.
   return $dates;
}


$dates = getData($rid);
print_r($dates);
参照 函数getData($rid,&$dates){ ... 对于($i=0;$i<5;$i++){ ... $dates[$i]=$dt; } } getData($rid,$dates); 返回 函数getData($rid){ $dates=array(); ... 对于($i=0;$i<5;$i++){ ... $dates[$i]=$dt; } 返回$日期; } $dates=getData($rid); 全球的 函数getData($rid){ 全球$日期; ... 对于($i=0;$i<5;$i++){ ... $dates[$i]=$dt; } }
在您的函数中声明以下内容:

global $dates;

这将使用全局变量
dates
,而不是创建一个局部变量并使用它,这就是现在正在发生的事情

这是一个范围界定问题。您应该将日期作为引用传入,或者作为函数的结果返回dates数组

function getData($rid){
   //Do whatever you need to do.
   return $dates;
}


$dates = getData($rid);
print_r($dates);

只需从函数返回,而不依赖全局数据:

function getData($rid) {
    // ...
    return $dates;
}
print_r(getData($rid));

$dates
在函数无效之前,将其移动到函数内部以正确初始化。

为什么不在
getData
函数中添加一个
$dates
参数,以便调用
getData
类似于
getData($rid,$dates)
?StackOverflow上可能有数千个与全局范围相关的问题。请搜索它们。还可以查看与可变范围相关的文档。还有关于通过引用传递变量的文档,这看起来像是您想要做的。更多的
global
正是PHP所需要的…@draevor请至少为提问者解释一下你反对global的论点。我添加了一个使用globals的替代方法——通过引用函数传递数组。返回
$dates
数组也是一个选项,但我决定显示第三个选项。@FunkyMonk91全局状态的缺点已经在许多地方讨论过了。例如,如果你需要缓存,你可以从Wikipedia开始,你可以用各种方式来做——为了最简单地查看我的响应,你可以使用函数的返回值重用一个变量。为了完整起见,我已经重新格式化了我的答案,将所有三个选项都包括在内。
function getData($rid){
   //Do whatever you need to do.
   return $dates;
}


$dates = getData($rid);
print_r($dates);
function getData($rid) {
    // ...
    return $dates;
}
print_r(getData($rid));