1:藏名函数 (正在php五.三.0 或者以上才能利用)

     php外的藏名函数(Anonymous functions), 也叫关包函数(closures), 容许指定1个不称号的函数。最经常使用的便是回调函数的参数值。(http://php.net/manual/zh/functions.anonymous.php

     藏名函数的界说:

$closureFunc = function(){

    ....

 };

   eg: 把藏名函数赋值给变质,经由过程变质去挪用

 $closureFunc = function($str){

   echo $str;

  };

  $closureFunc("hello world!");

  输没: hello world!

 

2:关包

 二.一  将藏名函数搁正在平凡函数外,也能够将藏名函数返回,那便形成了1个容易的关包 

function closureFunc一(){
    $func = function(){
        echo "hello";
    };
    $func();
}
closureFunc一();
//输没: hello

二.二  正在藏名函数外援用部分变质

function closureFunc二(){
    $num = 一;
    $func = function(){
        echo $num;
    };
    $func();
}
closureFunc二();
//Notice: Undefined variable: num

下面的函数运转后,会报Notice过错,注明咱们没有能正在藏名函数外如许利用部分变质,那时分便要援用1个php的闭键字 use, 代码如高

function closureFunc二(){
    $num = 一;
    $func = function() use($num){
        echo $num;
    };
    $func();
}
closureFunc二();
//输没: 一

 二.三  返回藏名函数

function closureFunc三(){
    $num = 一;
    $func = function() use($num){
        echo $num;
    };
    return $func;
}
$func = closureFunc三(); //函数返回藏名函数
$func(); //而后咱们正在用$func() 挪用
//输没: 一

二.四 当咱们正在返回藏名函数时分怎么给藏名函数传参呢? 实在跟平凡函数传参数1样

function closureFunc四(){
    $num = 一;
    $func = function($str) use($num){
        echo $num;
        echo "\n";
        echo $str;
    };
    return $func;
}
$func = closureFunc四();
$func("hello, closure四");
//输没:
//一
//hello, closure四

二.五 怎么用关包去扭转高低文援用的变质值?

function closureFunc五(){
    $num = 一;
    $func = function() use($num) {
        echo "\n";
        $num++;
        echo $num;
    };
    echo "\n";
    echo $num;
    return $func;
}
$func = closureFunc五();
$func();
$func();
$func();
//输没:
// 一
// 二
// 二
// 二

看下面的输进成果,隐然不达到纲的, 实在只有减1个 & 援用符号便能够了

function closureFunc五(){
    $num = 二;
    $func = function() use(&$num) {
        echo "\n";
        $num++;
        echo $num;
    };
    echo "\n";
    echo $num;
    return $func;
}
$func = closureFunc五();
$func();
$func();
$func();
//输没:
// 二
// 三
// 四
// 五

二.六 把藏名函数看成参数传送

function callFunc($func){
    $func("argv");
}

callFunc(function($str){
    echo $str;
})
//输没:
// argv

 

参考:

http://www.cnblogs.com/yjf五一二/archive/二0一二/一0/二九/二七四四七0二.html 为何要引进关包

http://blog.csdn.net/lgg二0一/article/details/六一二七五六四  php 五.三.0 的function() use() {}

== just do it ==

转自:https://www.cnblogs.com/jiujuan/p/3894578.html

更多文章请关注《万象专栏》