PHP:use()替代非匿名函数

Dav*_*ues 2 php anonymous-function

你可以这样做:

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

$change(5);
echo $external; //> 5
Run Code Online (Sandbox Code Playgroud)

但你不能这样做:

$external = 1;
function change($number) use(&$external) {
    $external = $number;
}
Run Code Online (Sandbox Code Playgroud)

你会得到:

解析错误:语法错误,意外"使用"(T_USE),期待'{'.

什么是替代品?

Abr*_*ver 7

use()仅在闭包中用于从父作用域继承变量.从手册:

闭包还可以从父作用域继承变量.必须将任何此类变量传递给use语言构造.

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

$external = 1;

function change($number, &$external) {
    $external = $number;
}
change(5, $external);
Run Code Online (Sandbox Code Playgroud)

或者不传递它使用它作为全局(如果$external在全局范围内):

$external = 1;

function change($number) {
    $GLOBALS['external'] = $number;
}
change(5);
Run Code Online (Sandbox Code Playgroud)