匿名函數中存取全域作用域變數
在PHP 中,匿名函數通常繼承封閉函數的本地作用域或全域作用域,如果在任何函數之外定義。但是,當您嘗試從匿名函數內修改全域作用域變數時,可能會遇到問題。
修改全域作用域變數
請考慮以下範例:
$variable = "nothing"; functionName($someArgument, function() { $variable = "something"; }); echo $variable; // Output: "nothing"
儘管嘗試在匿名函數中修改$variable,但輸出仍然是“無”。這是因為匿名函數會建立自己的作用域,並且不直接繼承全域作用域。
解決方案:閉包
要解決此限制,您可以使用閉包。閉包可讓您將變數從封閉範圍捕獲到新範圍中。要從匿名函數中修改全域範圍的變量,請使用以下語法:
functionName($someArgument, function() use (&$variable) { $variable = "something"; });
透過在變數名稱之前新增use 並使用& 引用它,您可以建立一個透過引用擷取變數的閉包,允許在匿名函數內進行修改。
結論
使用閉包使您可以從匿名函數內存取和修改全域範圍的變量,克服了創建新函數的限制匿名函數內的作用域。透過引用捕獲變量,您可以執行將在匿名函數範圍之外持續存在的修改。
以上是如何在 PHP 中的匿名函數中修改全域變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!