初学 PHP 对于回调函数的一些理解

一.匿名函数(闭包函数)

谈到回调函数,不得不提匿名函数;匿名函数,也叫闭包函数,也就是没有名字的函数,它可以单独存在,也可以将其赋值给某一个变量.
创建一个匿名函数或者叫做闭包函数的时候,要注意最后要加上分号,因为这是一条语句,并不是一个代码块;而平时创建一个普通函数,在最后不需要加分号,因为创建普通函数的结构是一个代码块.可是下面的代码看起来就像是一个代码块,实际上并不是(这是为啥呢?).
下面创建一个匿名函数.

<?php
function ($m, $n) {
    return $m + $n;
};

下面创建一个匿名函数,并赋值给某一个变量.

<?php
$add = function ($m, $n) {
    return $m + $n;
};

二.回调函数

手册里有一个解释,一些函数如 call_user_func()usort() 可以接受用户自定义的回调函数作为参数.回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法.
我所理解的是如果函数A调用函数B,此时函数B就扮演了回调函数的角色;反之,函数A扮演回调函数的角色.
回调函数可以由普通函数来扮演,也可以由上文提到的匿名函数来扮演.

普通函数扮演回调函数

在下面的代码中,将自定义的普通函数 add() 以字符串的形式作为普通函数 arithmetic() 的参数传入,那么此时自定义的 add() 函数就扮演了回调函数的角色.

<?php
function arithmetic($functionName, $m, $n) {
    return $functionName($m, $n);
}

function add($m,$n){
    return $m+$n;
};
$result = arithmetic("add",4,6);
echo $result;//输出 10

匿名函数扮演回调函数的一种方式

在下面的代码中,将自定义的匿名函数直接以引用传递的方式作为普通函数 arithmetic() 的参数传入,那么此时,自定义的这个匿名函数就扮演了匿名函数的角色.

<?php
function arithmetic($arithmetic, $m, $n) {
    return $arithmetic($m, $n);
}

$result = arithmetic(function ($m, $n) {
    return $m + $n;
}, 4, 6);

echo $result;//输出 10

匿名函数扮演回调函数的另一种方式

在下面的代码中,将自定义的匿名函数赋值给 $arithmetic ,然后将 $arithmetic 以引用传递的方式作为普通函数 arithmetic() 的参数传入,那么此时,自定义的这个匿名函数就扮演了匿名函数的角色.

<?php
function arithmetic($arithmetic, $m, $n) {
    return $arithmetic($m, $n);
}

$arithmetic = function ($m,$n){
    return $m+$n;
};

$result = arithmetic($arithmetic,4,6);
echo $result;//输出 10
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!