在项目中,难免会遇到闭包的形式,那么闭包中的变量作用域是什么呢?下面是几个简单的例子。e1functiontest_1(){$a='php';$func=function($b)use($a){//$a='java';echo$b.'_'.$a;};返回$func;}$test=test_1();$test('你好');上面的结果会输出hello_php然后可以看到$a作为变量传递给了匿名函数func,作为参数使用;如果去掉$a='java',那么上面的结果会输出hello_javae2:将上面的函数重写为functiontest_2(){$a='php';$func=function($b)use($a){//$a='go';echo$b.'_'.$a;};$a='Java';返回$func;}$test=test_2();$test('你好');上面的结果会输出hello_php说明在test_2中第二次给$a赋值时,没有传给func函数。同样,如果$a='go'被移除;然后上面的结果会输出hello_goe3:Nowaddareferenceto$afunctiontest_3(){$a='php';$func=function($b)使用(&$a){//$a='go';echo$b.'_'.$a;};$a='Java';return$func;}$test=test_3();$test('hello');上面的结果会输出hello_java,表示引用地址时变量a的值会传递给函数func。同样,如果$a='go'被移除;那么上面的结果会输出hello_go上面三个简单的测试,清楚的说明了闭包中参数的范围。当不使用地址引用时,匿名函数的变量值不会随着外部变量的变化而变化。(闭包的意思)使用地址引用后,参数值会被外部函数的参数值改变
