匿名函数与闭包

Original 2018-11-28 16:41:07 213
abstract://匿名函数赋值给变量 $demo1 = function ($name) {   return $name . '想追求如花'; }; //调用匿名函数 echo $demo1('哥哥'), '<hr>'; //匿名函数也有自
//匿名函数赋值给变量
$demo1 = function ($name) {
  return $name . '想追求如花';
};
//调用匿名函数
echo $demo1('哥哥'), '<hr>';

//匿名函数也有自己的作用域,如果要在函数作用域中使用外部变量,除了传参,还可以这样:即引用外部变量用关键字use

$belle = '周芷若';

//$demo2 = function ($name) {
$demo2 = function ($name_para) use ($belle) {
//    return $name . '最爱的人是赵敏';
    return $name_para . '最爱的人是: ' . $belle;//此次$belle不是参数,就是变量被调用
};

//调用匿名函数
echo $demo2('张无忌'), '<hr>';

//1.闭包函数当作局部变量使用
$func1 = function () {
    $name = '变量哥';
    //定义一个内部的匿名函数
    $test = function () use ($name) {
        return $name . ',我是匿名函数,我被另一个匿名函数包住且赋值给变量,你被我包住了,你是变量,而我必须被调用';
    };
    //调用,必须要调用一次,才能形成闭包
    return $test();
};
echo $func1(), '<hr>';

//2.闭包函数当作函数参数使用
$name = '变量兄';

$test = function () use ($name) {
    return $name . ',你仍然被我调用,我会被当作参数使用';
};

$func2 = function (callable $callback) {
    //执行匿名回调并返回
    return $callback();
};
//用匿名函数做为参数调用
echo $func2($test), '<hr>';

//3.闭包函数当用函数返回值使用
$func33 = function () {
    $name = '变量喵';

    $test = function () use ($name) {
        return $name . ',我会被当返回值使用,但是先赋值给了另一个变量,要多加一对括号,因为我毕竟是个函数';
    };
    return $test;
};
echo $func33()(), '<hr>';
//你可能见到最多的是这种简写形式
$func3 = function () {
    $name = 'Peter';

    return function () use ($name) {
        return $name . ',你是变量,我是被当返回值使用的匿名函数,务必记着再加一对括号,事了拂衣去,深藏身与名';
    };
};

// $func3() 的返回值是一个函数,所以再加一对圆括号,才可以执行
echo $func3()();
//经过这节课,这几个听上去高大上的名词对我来说再也不神秘了,谢谢老师


Correcting teacher:韦小宝Correction time:2018-11-28 16:58:17
Teacher's summary:不错!最后一句话说明你是真的理解了!但是课后还是要多练习!

Release Notes

Popular Entries