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