在闭包中初始化父范围变量

时间:2018-07-05 17:50:29

标签: php

为了在闭包内部初始化父作用域中的变量,我可以这样做:

$f = function () use (&$a) {
  $a = 1;
};
$f();
$a === 1; // true

我的问题是,这是副作用还是我将来可以依靠的预期行为?我知道我可以在定义闭包之前简单地添加$a = null,但这会使很多变量变得难看。

1 个答案:

答案 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