在项目中,难免会遇到闭包的形式,那么在闭包中,变量的作用域到底是怎么样的呢。下面有几个简单的例子。

e1

function test_1(){    $a = 'php';    $func =  function ($b) use ($a)    {       // $a = 'java';        echo $b.'_'.$a;    };    return $func;}$test = test_1();$test('hello');

e2:将上面的函数改写为

function test_2(){    $a = 'php';    $func =  function ($b) use ($a)    {       // $a = 'go';        echo $b.'_'.$a;    };    $a = 'java';    return $func;}$test = test_2();$test('hello');

同样的如果去掉 $a = 'go';那么以上结果会输出 hello_go

e3:现在为$a 加上引用

function test_3(){    $a = 'php';    $func =  function ($b) use (&$a)    {        //$a = 'go';        echo $b.'_'.$a;    };    $a = 'java';    return $func;}$test = test_3();$test('hello');

同样的如果去掉 $a = 'go';

那么以上结果会输出 hello_go;

在没有使用地址引用的时候 匿名函数的变量值,不会随着外部变量的改变而改变。(闭包的意义)

在使用了地址引用之后,参数值会被外部函数的参数值所改变。

更多PHP相关知识,请访问PHP教程!

更多相关文章

  1. PHP 学习总结之函数
  2. PHP执行Linux命令的两个有用的函数exec和shell_exec
  3. PHP中的pack和unpack函数的用法详解
  4. PHP 变量的四大作用域
  5. 四种好用的PHP自定义加密函数(可逆/不可逆)
  6. 关于php中变量的初始化以及赋值方式的介绍
  7. 通过header函数设置响应头解决php跨域问题
  8. 关于php中匿名函数与回调函数的详解
  9. php匿名函数的使用

随机推荐

  1. Android(安卓)Location服务之Geocoder
  2. Android USB状态监控(解决scheme="file")
  3. Android高手进阶教程(五)之----Android(
  4. Android夜间模式实现,通过在window上加一
  5. launcher修改--获取屏幕缩略(预览)图
  6. 加速Android(安卓)Studio/Gradle构建
  7. Android中的style&themes
  8. Android高斯模糊、高斯平滑(Gaussian Blur
  9. CyanogenMod 11.0 android 4.4 编译指南
  10. android 源码总体结构