闭包函数

闭包的概念

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 在php中,闭包函数一般就是匿名函数. 举例,有一个定时任务,每一秒执行一次,现在我们要开启一个服务,然后准备在30秒的时候关闭这个服务

  1. <?php
  2. function tick($callback){
  3. while (1) {//简单实现的定时器,每秒都去执行一次回调
  4. call_user_func($callback);
  5. sleep(1);
  6. }
  7. }
  8. class Server
  9. {
  10. //模拟退出一个服务
  11. public function exitServer()
  12. {
  13. return true;
  14. }
  15. }
  16. $server = new Server();
  17. $time = time();
  18. tick(function ()use($server) {
  19. $server->exitServer();
  20. });

在这里面,使用匿名函数,use了函数外部的$server变量,才使得定时器能回调调用$server->exitServer();

匿名函数

匿名函数 通俗来讲,就是没有名字的函数,例如上面写的function(){},它通常作为闭包函数使用,使用方法如下:

  1. <?php
  2. $fun = function($name){
  3. printf("Hello %s\r\n",$name);
  4. };
  5. echo $fun('Tioncico');
  6. function a($callback){
  7. return $callback();
  8. }
  9. a(function (){
  10. echo "EasySwoole\n";
  11. return 1;
  12. });

use

PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字。

  1. <?php
  2. function a($callback){
  3. return $callback();
  4. }
  5. $str1 = "hello,";
  6. $str2 = "Tioncico,";
  7. a(function ()use($str1,$str2){
  8. echo $str1,$str2,"EasySwoole\n";
  9. return 1;
  10. });