[TOC]
# 回调函数
******
回调函数就是在主进程执行当中,突然跳转到预先设置好的函数中去执行的函数。
```php
以下是来自知乎作者常溪玲的解说:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了电话,过了几天店里有货了,
店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
```
以下是一个非常简单的回调函数的例子:
```php
<?php
// 登记回调函数
function insert(int $i):bool {
echo "插入数据{$i}\n"; // 模拟数据库插入 // 响应回调事件
return true;
}
$arr = range(0, 1000); // 模拟生成1001条数据
function action(array $arr, callable $function) {
foreach ($arr as $value) {
if ($value % 10 == 0) { //当满足条件时,去执行回调处理 // 触发回调
call_user_func($function, $value); // 调用回调事件
}
}
}
action($arr, 'insert');
```
在这个例子中,首先定义了一个插入数据的函数,定义了一个 1001 条数据的数组,然后调用了 action 函数,当遍历数组满足条件时,则执行设定好的回调函数进行插入数据。
<br />
## 回调函数的几种写法
### 函数字符串
```php
<?php
function insert(int $i):bool {
echo "插入数据{$i}\n"; // 模拟插入数据库插入
return true;
}
$arr = range(0, 1000); // 模拟生成1001条数据
function action(array $arr, callable $function) {
foreach ($arr as $value) {
if ($value % 10 == 0) { // 当满足条件是,去执行回调处理
call_user_func($function, $value);
}
}
}
action($arr, 'insert');
```
<br />
### 匿名函数
```php
<?php
$arr = range(0, 1000); // 模拟生成1001条数据
function action(array $arr, callable $function) {
foreach ($arr as $value) {
if ($value % 10 == 0) { // 当满足条件是,去执行回调处理
call_user_func($function, $value);
}
}
}
action($arr, function($i):bool {
echo "插入数据{$i}\n"; // 模拟插入数据库插入
return true;
});
```
<br />
### 类静态方法
```php
<?php
class A
{
public static function insert(int $i):bool
{
echo "插入数据{$i}\n"; // 模拟插入数据库插入
return true;
}
}
$arr = range(0, 1000); // 模拟生成1001条数据
function action(array $arr, callable $function) {
foreach ($arr as $value) {
if ($value % 10 == 0) { // 当满足条件是,去执行回调处理
call_user_func($function, $value);
}
}
}
action($arr, array('A', 'insert'));
action($arr, 'A::insert');
```
<br />
### 类方法
```php
<?php
class A
{
public function insert(int $i):bool
{
echo "插入数据{$i}\n"; // 模拟插入数据库插入
return true;
}
}
$arr = range(0, 1000); // 模拟生成1001条数据
function action(array $arr, callable $function) {
foreach ($arr as $value) {
if ($value % 10 == 0) { // 当满足条件是,去执行回调处理
call_user_func($function, $value);
}
}
}
$a = new A();
action($arr, array($a, 'insert'));
```
- 引言
- 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
- 提问的艺术