闭包函数的特性和作用及应用场合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/living_ren/article/details/73188233
<?php
/*1.匿名函数也叫闭包函数,顾名思义就是没有名字的函数;
  2.因为没有名字,所以匿名函数不能直接调用,需要先将匿名函数赋值给一个变量,然后由变量函数的形式来调用;
  3.匿名函数在函数体结束后必须在}后加上";",这也是它与普通函数的区别;
  4.匿名函数可以正常传参数和参与计算;
*/


    $var=function($a,$b,$c)
    {
        return $a+$b+$c;
    };//加分号,切记
    var_dump($var);//输出变量类型为一个对象,且隶属于closure类中
    echo $var(1,2,3);//输出6
    echo "<br>";
    
/*5.我们知道,函数不能直接使用外部定义的全局变量,要想在函数中使用必须加上global关键字;
  6.闭包函数的概念通俗的讲:就是在子函数中可以直接调用父函数中所定义的变量;
  7.要想让子函数使用父函数中的变量必须使用关键字use来实现
*/

    function demo()//父函数demo
    {
        $a=10;
        $b=20;
        function one()//子函数one
        {
            global $a;
            echo "1111111111{$a}111111<br>";//无法直接输出在父函数中定义的变量$a,如若声明global,则会调用函数外部的全局变量
        }
        function two()//子函数two
        {
            global $b;
            echo "222222222222222{$b}<br>";//无法输出$b,在子函数中定义了global也不行
        }
        $three=function()use($a,$b)//子函数/匿名函数$three(),在匿名函数中使用use加父函数中的变量名就可以在子函数中输出
        {
            echo "--$a--aaaaaa--$b--<br>";//可以正常输出$a和$b
        };//切记加分号
        $three();
    }
    demo();
/*
    8.当内层函数调用外部函数的变量时,要加引用,否则不会改变局部变量在函数中的值;
    9.闭包的外部是个函数,内部是一个匿名函数;
    10.闭包函数的作用就是保护闭包中的内存变量,闭包执行完毕后闭包内部的变量不会存在,而外部函数的变量则会保存;
*/

    function test()
    {
        $a=10;
        $b=20;
        $inter=function()use(&$a,&$b)//加引用
        {
            echo $a,$b."<br>";
            $a++;
            $b++;
            echo $a,$b."<br>";
            //return,内层函数不能加返回值
        };
        return $inter;
    }
    $test=test();
    $test();
    $test();
    $test();//多次输出后发现局部变量的值并不会被释放
//11.匿名函数可以当参数来使用
    function test1($func)
    {
        echo $func();
        echo "<br>";
    }
    test1(function(){
        return "$$$$$$$$";
    });//直接将一个匿名函数当做参数传入函数中;
?>
阅读更多
换一批

没有更多推荐了,返回首页