初学 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 协议》,转载必须注明作者和本文链接