[英]php global variable not showing correct answer
它非常简单的代码,但我不明白这是什么意思:(
function aaa($b){
$a = 30;
global $a,$c;
return $c=($b+$a);}
echo aaa(40); //Output is 40
为什么输出是40? 当我在功能之外调用$ a时,它给了我想要的答案那么重点是什么?
$a = 30;
function aaa($b){
global $a,$c;
return $c=($b+$a);
}
echo aaa(40); //Output is 70
function aaa($b){
global $a,$c;
$a = 30;
return $c=($b+$a);
}
echo aaa(40); //Output is 70
查看global
关键字代表什么:
function aaa($b) {
$a = 30; # local variable, will be overwritten just in the next line
global $a, $c; # importing $a from the global scope - NULL
return $c = ($b + $a); # $c = (40 + NULL)
}
http://php.net/global上的手册提醒全局变量如果在那里使用它会影响函数。 这不仅适用于第一次通话,也适用于所有后续通话。
这使得函数不确定,所以代码不那么有用,你可能 - 正如你刚才所做的那样 - 对它感到恼火。
一个简单的方法是:不要将该函数的参数值放入全局变量,而是将它们转换为参数:
function aaa($a, $b, &$c) {
return $c = ($b + $a);
}
echo aaa(30, 40, $c); //Output is 70
代码不仅更易于阅读,而且具有确定性 。 调用时它的行为始终相同。 这意味着更少的猜测。
此示例仍然存在通过参数(通过引用)返回值的问题,但是您可能也会看到这不再是必需的:
function aaa($a, $b) {
return ($b + $a);
}
echo $c = aaa(30, 40); //Output is 70
要带走的教训:
当使用例如global $a;
,PHP覆盖变量$a
并为其分配引用,就好像这个语句被替换为:
$a = &$GLOBALS["a"]; // and the same with every other variable which is used in global
由于$a
未在第一个示例中定义, $GLOBALS["a"]
计算结果为null
,因此$a
正在成为对包含null
值的变量的引用。
尝试var_dump($GLOBALS);
在函数调用之前和之后。 它将在函数调用之后显示一个名为a
的新索引(值为null
或您为其指定的值)。
(Ps:实际上它正在直接引用主范围中的变量。)
in php a variable Scope priority is
1- local variable
2- global variable
即使您确定函数体中的全局$ a,但是当它在apear时使用局部变量$ a。 如果你想使用与你的局部变量同名的全局变量,请参考Php变量引用你必须使用$ GLOBALS ['c'] = $ GLOBALS ['a'] + $ b; 如果$ c和$ a是全局定义希望这个帮助
我认为,在第一种情况下,$ a是未定义的。 首先写入$ a然后调用函数的值。 在页面顶部使用error_reporting(E_ALL)来了解脚本中的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.