为了在闭包内部初始化父作用域中的变量,我可以这样做:
$f = function () use (&$a) {
$a = 1;
};
$f();
$a === 1; // true
我的问题是,这是副作用还是我将来可以依靠的预期行为?我知道我可以在定义闭包之前简单地添加$a = null
,但这会使很多变量变得难看。
答案 0 :(得分:4)
根据参考手册PHP : What References Do的预期行为:
注意:
如果您通过引用分配,传递或返回 undefined 变量,则该变量 将被创建。
即使在调用函数之前,也会创建变量并将其设置为NULL
,因为use
在函数创建时会导入变量。在函数定义之前,您会收到 Notice:未定义变量:a :
var_dump($a);
$f = function () use (&$a) {
//$a = 1;
};
var_dump($a);
$f();
var_dump($a);
收益:
Notice: Undefined variable: a
NULL
NULL
NULL