• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php中的匿名函数和闭包详解

php 搞代码 3年前 (2022-01-22) 18次浏览 已收录 0个评论

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

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

匿名函数的定义:

$closureFunc = function(){    .... };

eg: 把匿名函数赋值给变量,通过变量来调用

 $closureFunc = function($str){   echo $str;  };  $closureFunc("hello world!");

输出: hello world!

二:闭包

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

function closureFunc1(){    $func = function(){        echo "hello";    };    $func();}closureFunc1();//输出: hello

2.2 在匿名函数中引用局部变量

function closureFunc2(){    $num = 1;    $func = function(){        echo $num;    };    $func();}closureFunc2();//Notice: Undefined variable: num

上面的函数运行后,会报Notice错误,说明我们不能在匿名函数中这样使用局部变量,这时候就要引用一个php的关键字 use, 代码如下

function closureFunc2(){    $num = 1;    $func = function() use($num){        echo $num;    };    $func();}closureFunc2();//输出: 1

2.3 返回匿名函数

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

2.4 当我们在返回匿名函数时候怎么给匿名函数传参呢? 其实跟普通函数传参数一样

function closureFunc4(){    $num = 1;    $func = function($str) use($num){        echo $num;        echo "\n";        echo $str;    };    return $func;}$func = closureFunc4();$func("hello, closure4");//输出://1//hello, closure4

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

function closureFunc5(){    $num = 1;    $func = function() use($num) {        echo "\n";        $num++;        echo $num;    };    echo "\n";    echo $num;    return $func;}$func = closureFunc5();$func();$func();$func();//输出:// 1// 2// 2// 2

看上面的输入结果,显然没有达到目的, 其实只要加一个 & 引用符号就可以了

function closureFunc5(){    $num = 2;    $func = function() use(&$num) {        echo "\n";        $num++;        echo $num;    };    echo "\n";    ec<em style="color:transparent">本文来源gao.dai.ma.com搞@代*码#网</em><a>搞代gaodaima码</a>ho $num;    return $func;}$func = closureFunc5();$func();$func();$func();//输出:// 2// 3// 4// 5

2.6 把匿名函数当作参数传递

function callFunc($func){    $func("argv");}callFunc(function($str){    echo $str;})//输出:// argv

以上就是php中的匿名函数和闭包详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php中的匿名函数和闭包详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址