簡體   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