繁体   English   中英

php全局变量未显示正确答案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM