PHP 匿名函数使用技巧

| 选择喜欢的代码风格  

<?php
$anonymousFunc = function($username){
    echo $username;
  };

$anonymousFunc("CommandNotFound 坑否!");

PHP 匿名函数技巧 1


将匿名函数放在普通函数中,也可以将匿名函数返回:这样就构成了一个简单的闭包 :

<?php
function closureFunc(){
    $anonymousFunc = function(){
        echo "CommandNotFound 坑否!";
    };

    $anonymousFunc();//普通函数内部调用了匿名函数
}

closureFunc();//输出: CommandNotFound 坑否!

PHP 匿名函数技巧 2


匿名函数中引用局部变量 (这里要引用一个 php 的关键字 use)

<?php
function closureFunc(){
    $username = 'CommandNotFound 坑否!';
    $anonymousFunc = function() use($username){
        echo $username;
    };

    $anonymousFunc();//此处调用了匿名函数
}

closureFunc();//输出: CommandNotFound 坑否!

PHP 匿名函数技巧 3


在普通函数中返回匿名函数

<?php
function closureFunc(){
    $username = 'CommandNotFound 坑否!';
    $anonymousFunc = function() use($username){
        echo $username;
    };

    return $anonymousFunc;// 函数返回匿名函数
}

$func = closureFunc();
$func(); //然后调用$func() 

PHP 匿名函数技巧 4


返回匿名函数并给匿名函数传参

<?php
function closureFunc(){
    $username = 'CommandNotFound 坑否!';
    $anonymousFunc = function($lover,$skill) use($username){
        echo $username.$lover.$skill;
    };
    return $anonymousFunc;
}
$func = closureFunc();
$func("CommandNotFound","坑否");//CommandNotFound 坑否 CommandNotFound 坑否

PHP 匿名函数技巧 5


使用 PHP 闭包改变上下文引用的变量值

<?php
function closureFunc(){
    $number = 100;
    $anonymousFunc = function() use($number) {
        $number++;
        echo $number.PHP_EOL;
    };
    echo $number.PHP_EOL;
    return $anonymousFunc;
}

$func = closureFunc();// 这里输出100,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 调用函数的返回值 $anonymousFunc  $number++ 即为101
$func(); //101
$func();//101

上面的输入结果,发现后面的两个 func() 均返回 101,值并未发生改变,如果要累积 ++ 的效果, 只要加一个 & 引用符号就可以了(匿名函数内的修改也会影响外部变量),修改下:

<?php
function closureFunc(){
    $number = 100;
    $anonymousFunc = function() use(&$number) {
        $number++;
        echo $number.PHP_EOL;
    };
    echo $number.PHP_EOL;
    return $anonymousFunc;
}

$func = closureFunc();// 这里输出100,直接调用本函数的 echo $number.PHP_EOL; 即为100
$func();// 调用函数的返回值 $anonymousFunc  $number++ 即为101
$func(); //102
$func();//103

PHP 匿名函数技巧 6


把匿名函数当作参数传递

<?php
//定义普通函数,anonymousFunc 为参数变量
function myFunc($anonymousFunc){
    $anonymousFunc("CommandNotFound 坑否");
}

myFunc(function($username){ //这里调用普通函数,并把 匿名函数作为参数 传给了myFunc中的$anonymousFunc
    echo $username;
});//输出 CommandNotFound 坑否

PHP 匿名函数扩展阅读:




发表评论