php中的全局变量无法正常工作

时间:2011-02-14 21:05:29

标签: php include global-variables

如下例所示,我希望输出为“测试值”,为什么我会改为“0”?

文件main.php

<?php
include_once 'functions.php';
$var = '0'; 
test();
echo $var; 
?>

文件functions.php

<?php 
function test()
{
    global $var;
    $var = 'test value';
}
?>

4 个答案:

答案 0 :(得分:2)

你最好的办法是:

   include_once 'functions.php';
   $_GLOBALS["var"] = '0'; 
   test();
   echo $_GLOBALS["var"]; 

并且在使用$_GLOBALS["var"]而不使$_GLOBALS成为全局的函数中,它就是。

您的代码完美无缺:http://codepad.org/zI9xg1sK

答案 1 :(得分:1)

我能想到的唯一原因是main.php也包含在函数中,使$var成为该函数范围内的局部变量。

在这种情况下,这会有所帮助:

<?php
 global $var;
 include_once 'functions.php';
 $var = '0'; 
 test();
 echo $var; 
 ?>

答案 2 :(得分:1)

为什么不用

制作它
return $var;

并以这种方式调用函数:

$var = test();

答案 3 :(得分:0)

这是另一个例子。 Ian评论了CappY的答案,即真实函数已经返回一个值。我认为这就是为什么他认为他需要一个全球可怜的人。

您不需要(ab)使用全局变量从函数返回多个值。两个备选(和更好)选项是返回一个数组,或通过引用传递变量。

返回数组的示例:

function test() {
    return array('value 1', 'value 2');
}

// Example usage
list($var1, $var2) = test();
var_dump($var1); // outputs "value 1"
var_dump($var2); // outputs "value 2"

通过引用传递的示例

function test(&$var2) {
    $var2 = 'value 2';
    return 'value 1';
}

// Example usage
$var1 = test($var2);
var_dump($var1); // outputs "value 1"
var_dump($var2); // outputs "value 2"