你可以这样做:
$external = 1;
$change = function($number) use(&$external) {
$external = $number;
};
$change(5);
echo $external; //> 5
但你不能这样做:
$external = 1;
function change($number) use(&$external) {
$external = $number;
}
你得到:
解析错误:语法错误,意外'使用' (T_USE),期待' {'。
有什么替代方案?
答案 0 :(得分:7)
use()
仅在闭包中用于从父作用域继承变量。从手册:
闭包还可以从父作用域继承变量。必须将任何此类变量传递给使用语言构造。
如果要在常规函数中使用引用变量,请使用:
$external = 1;
function change($number, &$external) {
$external = $number;
}
change(5, $external);
或者不传递它将其用作全局(如果$external
在全局范围内):
$external = 1;
function change($number) {
$GLOBALS['external'] = $number;
}
change(5);