资讯专栏INFORMATION COLUMN

PHP 闭包之变量作用域

thekingisalwaysluc / 3189人阅读

摘要:以上结果会输出那么可以看到被作为了变量通过传递给了匿名函数作为参数使用如果去掉的注释,那么以上结果会输出将上面的函数改写为以上结果会输出说明在中第二次为赋值的时候,并没有传递的到函数里面去。

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

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

}
$test = test_1();
$test("hello");

以上结果会输出 hello_php 那么可以看到 $a 被作为了变量 通过use传递给了 匿名函数 func 作为参数使用;如果去掉$a = "java"的注释,那么以上结果会输出 hello_java

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");

以上结果会输出 hello_php 说明在test_2中第二次为$a赋值的时候,并没有传递的到 func函数里面去。
同样的如果去掉 $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");

以上结果会输出 hello_java 说明在地址引用的时候 变量 a 的值会传递到 函数func里面去。
同样的如果去掉 $a = "go";那么以上结果会输出 hello_go

以上三个简单的测试,很明白的说明的闭包里面参数的作用域。
在没有使用地址引用的时候 匿名函数的变量值,不会随着外部变量的改变而改变。(闭包的意义)
在使用了地址引用之后,参数值会被外部函数的参数值所改变

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29376.html

相关文章

  • JavaScript深入闭包

    摘要:深入系列第八篇,介绍理论上的闭包和实践上的闭包,以及从作用域链的角度解析经典的闭包题。定义对闭包的定义为闭包是指那些能够访问自由变量的函数。 JavaScript深入系列第八篇,介绍理论上的闭包和实践上的闭包,以及从作用域链的角度解析经典的闭包题。 定义 MDN 对闭包的定义为: 闭包是指那些能够访问自由变量的函数。 那什么是自由变量呢? 自由变量是指在函数中使用的,但既不是函数参数也...

    caige 评论0 收藏0
  • javascript闭包不完全探索记录01:闭包?啥馅的?

    摘要:闭包一词来源于以下两者的结合要执行的代码块由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放和为自由变量提供绑定的计算环境作用域。在以及及以上等语言中都能找到对闭包不同程度的支持。 温馨提示:作者的爬坑记录,对你等大神完全没有价值,别在我这浪费生命 闭包,好吃吗 ? 第一次听到这个词,很不幸是在一次面试中,可想而知结果很细碎,从此闭包和跨域在我匮乏的前端知识中成为了...

    TANKING 评论0 收藏0
  • PHP新特性闭包、匿名函数

    摘要:闭包闭包是什么闭包和匿名函数在中被引入。可以将匿名函数和闭包视作相同的概念。闭包和字符串或整数一样,是一等值类型。何时使用我们通常把闭包当做函数和方法的回调使用。 闭包 闭包是什么? 1).闭包和匿名函数在PHP5.3中被引入。2).闭包是指在创建时封装函数周围状态的函数,即使闭包所在的环境不存在了,闭包封装的状态依然存在,这一点和Javascript的闭包特性很相似。3).匿名函数就...

    luzhuqun 评论0 收藏0
  • 谈谈我所理解的闭包,js、php、golang里的closure

    摘要:当初看这个解释有点懵逼,理解成闭包就是函数中的函数了。里的闭包最近不满足于只干前端的活,开始用起了。里的闭包最近在学习语言,让我们来看一下语言里的闭包。在中,闭包特指将函数作为值返回的情况,被返回的函数引用了生成它的母函数中的变量。 本人开始接触编程是从js开始的,当时网上很多人说闭包是难点,各种地方对闭包的解释也是千奇百怪。如今开始接触js以外的各种编程语言,发现不光是js,php、...

    betacat 评论0 收藏0
  • 谈谈我所理解的闭包,js、php、golang里的closure

    摘要:当初看这个解释有点懵逼,理解成闭包就是函数中的函数了。里的闭包最近不满足于只干前端的活,开始用起了。里的闭包最近在学习语言,让我们来看一下语言里的闭包。在中,闭包特指将函数作为值返回的情况,被返回的函数引用了生成它的母函数中的变量。 本人开始接触编程是从js开始的,当时网上很多人说闭包是难点,各种地方对闭包的解释也是千奇百怪。如今开始接触js以外的各种编程语言,发现不光是js,php、...

    zhoutao 评论0 收藏0

发表评论

0条评论

thekingisalwaysluc

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<