PHP:非匿名函数使用()的替代方法

PHP:非匿名函数使用()的替代方法,php,anonymous-function,Php,Anonymous Function,您可以这样做: $external = 1; $change = function($number) use(&$external) { $external = $number; }; $change(5); echo $external; //> 5 但你不能这样做: $external = 1; function change($number) use(&$external) { $external = $number; } 你会得到: 分析错误:

您可以这样做:

$external = 1;
$change = function($number) use(&$external) {
    $external = $number;
};

$change(5);
echo $external; //> 5
但你不能这样做:

$external = 1;
function change($number) use(&$external) {
    $external = $number;
}
你会得到:

分析错误:语法错误,意外的“use”(T_use),应为“{”

什么是替代方案?

仅在闭包中用于从父范围继承变量。手册:

闭包也可以从父作用域继承变量。任何此类变量都必须传递给use language构造

如果要在常规函数中通过引用使用变量,请使用:

$external = 1;

function change($number, &$external) {
    $external = $number;
}
change(5, $external);
或不通过,将其用作全局(如果
$external
在全局范围内):


这个函数是一个类的一部分吗?
函数更改($number,&$external){
@abracadver和@user4035:但是当调用与在闭包中捕获它时,您需要传递
$external
。@RocketHazmat使用“global”关键字怎么样?闭包可以嵌套在函数中,因此有“use”的意义但是,函数不能嵌套。PHP只是将嵌套函数声明为常规函数。因此,“use”没有任何意义,因为父作用域是全局作用域。因此,您尝试访问全局变量,这很容易使用global关键字或$GLOBALS。
$external = 1;

function change($number) {
    $GLOBALS['external'] = $number;
}
change(5);