php中的全局变量问题

时间:2012-11-02 19:24:37

标签: php

  

可能重复:
  PHP global variable not found in functions

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

$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

我的问题是:除非我打电话参考函数中的$ date,否则它不会吐出我的数据。我需要在函数外部完成此操作,以便在运行时将值放入文本字​​段中。

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

4 个答案:

答案 0 :(得分:4)

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

通过引用传递

function getData($rid, &$dates) {
    ...
    for ($i=0; $i < 5; $i++) { 
        ...
        $dates[$i] = $dt;
    }
}

getData($rid, $dates);

返回

function getData($rid) {
    $dates = array();
    ...
    for ($i=0; $i < 5; $i++) { 
        ...
        $dates[$i] = $dt;
    }
    return $dates;
}

$dates = getData($rid);

全局

function getData($rid){
    global $dates;
    ...
    for ($i=0; $i < 5; $i++) { 
        ...
        $dates[$i] = $dt;
    }  
}

答案 1 :(得分:2)

这是一个范围问题。您应该将日期作为参考传递,或者作为函数的结果返回日期数组。

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


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

答案 2 :(得分:2)

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

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

函数前的$dates无效,在函数内移动它以正确初始化它。

答案 3 :(得分:1)

在你的函数中声明以下内容:

global $dates;

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