PHP的匿名函数

Posted lxlx2018done

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP的匿名函数相关的知识,希望对你有一定的参考价值。

一:匿名函数 (注意: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 "
";
        echo $str;
    };
    return $func;
}
$func = closureFunc4();
$func("hello, closure4");


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

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



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



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

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


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








































以上是关于PHP的匿名函数的主要内容,如果未能解决你的问题,请参考以下文章

从匿名函数(闭包特性)到 PHP 设计模式之容器模式

PHP匿名函数(闭包函数)详解_php技巧 - PHP

php匿名函数和闭包函数及use关键字传参及Closure匿名函数类

php实现匿名函数

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

类方法中的 PHP 匿名函数隐藏类名(想使用 self 之类的东西来处理类名)