如下例所示,我希望输出为“测试值”,为什么我会改为“0”?
文件main.php
<?php
include_once 'functions.php';
$var = '0';
test();
echo $var;
?>
文件functions.php
<?php
function test()
{
global $var;
$var = 'test value';
}
?>
答案 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"