ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 闭包函数 ****** 闭包就是能够读取其他函数内部变量的函数。例如在 JavaScript 中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数”。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。在 php 中,闭包函数一般就是匿名函数。举例,有一个定时任务,每一秒执行一次,现在我们要开启一个服务,然后准备在30秒的时候关闭这个服务。 ```php <?php function tick($callback) { while (1) { // 简单实现的定时器,每秒都去执行一次回调。 call_user_func($callback); sleep(1); } } class Server { // 模拟退出一个服务 public function exitServer() { return true; } } $server = new Server(); $time = time(); tick(function () use ($server) { $server->exitServer(); }); ``` 在这里面,使用匿名函数,use 了函数外部的 $server 变量,才使得定时器能回调调用 $server->exitServer(); <br /> # 匿名函数 匿名函数,通俗来讲,就是没有名字的函数,例如上面写的 function(){},它通常作为闭包函数使用,使用方法如下: ```php <?php $fun = function($name) { printf("Hello %s\r\n", $name); }; echo $fun('huanghui'); function a($callback) { return $callback(); } a(function () { echo "EasySwoole\n"; return 1; }); ``` 结果: ```php Hello huanghui EasySwoole ``` <br /> ## use PHP 在默认情况下,匿名函数不能直接调用所在代码块的上下文变量,而需要通过使用 use 关键字。 ```php <?php function a($callback) { return $callback(); } $str1 = "hello,"; $str2 = "huanghui,"; a(function () use ($str1, $str2) { echo $str1, $str2, "EasySwoole\n"; return 1; }); ``` 结果: ```php hello,huanghui,EasySwoole ```