2016-09-28 70 views

回答

5

還有就是你的兩個例子的一個重要區別:

$global_variable = 1; 

$closure = function() use ($global_variable) { 
    return $global_variable; 
}; 

$closure2 = function() { 
    global $global_variable; 
    return $global_variable; 
}; 

$global_variable = 99; 

echo $closure(); // this will show 1 
echo $closure2(); // this will show 99 

use需要關閉的定義中的$global_variable價值,同時global執行過程中所採用的$global_variable當前值。

global從全局範圍繼承變量,而use從父範圍繼承它們。

+0

雖然這是正確的,但在許多情況下,您希望將對象實例傳遞給閉包。對象通過引用傳遞,在閉包的定義之後,對象的狀態**的任何變化都將在閉包中可用。 – Benni

0

Use關鍵字在父範圍內,而global$GLOBALS是來回無處不在。

這意味着如果你使用global你可能不知道價值是否已經改變,從哪裏改變,改變什麼。

您可以通過使用use進行更多控制。所以這取決於你的需求。