[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
```
- 引言
- Introduction
- 运行模式
- php-fpm
- php-cli
- 基础介绍
- 网络协议
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 会话管理
- cookie
- session
- api/token
- linux基础
- lnmp安装
- 命令
- 进程管理
- 扩展安装
- 端口监控
- 防火墙说明
- php7.0
- 部分新特性
- php回调/闭包
- 回调事件
- 闭包/匿名函数
- php多进程
- 多进程开启
- 进程通信
- 进程信号
- 僵尸进程
- 孤儿进程
- 守护进程
- 同步/异步
- 阻塞/非阻塞
- 协程
- Swoole
- 初始Swoole
- 运行机制
- 生命周期
- composer使用
- EasySwoole
- 设计理念
- 组件说明
- 运行过程
- demo
- 提问的艺术