首页 > Web开发 > 详细

PHP的匿名函数

时间:2018-11-25 14:07:39      阅读:158      评论:0      收藏:0      [点我收藏+]

一:匿名函数 (注意:在php5.3.0 或以上才能使用)

     php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值。

     匿名函数的定义:

$func = function(){

    ....

 };
//把匿名函数赋值给变量,通过变量来调用

$func = function($str){   

echo $str;
};

$func("hello world!");

二:闭包

将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包.
function closureFunc1(){
    $func = function(){
        echo "hello";
    };
    $func();
}
closureFunc1();


//在匿名函数中引用局部变量
function closureFunc2(){
    $num = 1;
    $func = function(){
        echo $num;
    };
    $func();
}
closureFunc2();


上面的函数运行后,会报Notice错误,说明我们不能在匿名函数中这样使用局部变量,这时候就要引用一个php的关键字 use
function closureFunc2(){
    $num = 1;
    $func = function() use($num){
        echo $num;
    };
    $func();
}
closureFunc2();

// 返回匿名函数

function closureFunc3(){
    $num = 1;
    $func = function() use($num){
        echo $num;
    };
    return $func;
}
$func = closureFunc3(); //函数返回匿名函数
$func(); //然后我们在用$func() 调用


当我们在返回匿名函数时候怎么给匿名函数传参呢? 其实跟普通函数传参数一样
function closureFunc4(){
    $num = 1;
    $func = function($str) use($num){
        echo $num;
        echo "\n";
        echo $str;
    };
    return $func;
}
$func = closureFunc4();
$func("hello, closure4");


【怎么用闭包来改变上下文引用的变量值?】

function closureFunc5(){
    $num = 1;
    $func = function() use($num) {
        echo "\n";
        $num++;
        echo $num;
    };
    echo "\n";
    echo $num;
    return $func;
}
$func = closureFunc5();
$func();
$func();
$func();



【测试引用 & 符 ,再看结果】
function closureFunc5(){
    $num = 2;
    $func = function() use(&$num) {
        echo "\n";
        $num++;
        echo $num;
    };
    echo "\n";
    echo $num;
    return $func;
}
$func = closureFunc5();
$func();
$func();
$func();



把匿名函数当作参数传递
function callFunc($func){
    $func("argv");
}

callFunc(function($str){
    echo $str;
})


更多资料请参考开发手册或者官网 : http://www.php.net
                                                      

PHP的匿名函数

原文:https://www.cnblogs.com/lxlx2018done/p/10015356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!