PHP:0806回调函数和递归函数的理解
```php
/*
回调函数: 指调用函数时 并不是 向函数中传递一个标准的变量作为参数,而是将另一个 函数 作为 参数 传递到 调用 的函数中,这个作为参数的函数就是回调函数;
我的理解:所谓的回调函数就是将函数1当做参数在函数2中调用,函数1就被叫做 回调函数. 回调函数并不是指一个固定的函数,而是指被当作参数传递的函数,就是回调函数.
而回调函数经常使用的情形是和PHP内置的的函数call_user_func和call_user_func_array配合使用
*/
/*1.自定义函数add()作为回调函数求和,
自定义函数sub()作为回调函数求乘积
使用注意:回调函数调用时,是使用函数名作为”字符串名”来调用的,而不是使用函数名称调用.
/
function arith($funcName,$m,$n ){
return $funcName($m,$n);
}
//求和的回调函数
function add($m,$n){
return $m+$n;
}
$sum =arith(‘add’,3,5);
echo “3+5=”.$sum;
//求乘积的回调函数
function sub($m,$n){
return $m$n;
}
$sum =arith(‘sub’,3,5);
echo “35=”.$sum;
/
2.使用内置函数 call_user_func() ,调用回调函数
*/
echo “<hr>“;
//function two($funcDev,$m,$n){
// return call_user_func($funcDev,$m,$n);
//}
function arithmetic($funcName, $m, $n) {
return call_user_func($funcName, $m, $n);
}
function add($m,$n){
return $m+$n;
}
$sum = arithmetic(‘add’, 7, 17);
echo ‘7 + 17 =’.$sum;
function arithmetic2($funcName, $m, $n) {
return call_user_func($funcName, $m, $n);
}
function dev($m,$n){
return $m / $n;
}
//echo $res2=arithmetic2(dev(8,2)); //错误示例,注意调用时是函数名对应的字符串
/ call_user_func(“这个位置第一个调用的是回调函数的名字”,$回调函数的参数,$回调函数的参数)
/
echo $res2=arithmetic2(‘dev’,8,2);
// 以上回调的错误目前无法排除
function test($name){
return ‘nihao’.$name;
}
echo calluser_func(‘test’,’张三’);
//call_user_func
echo “<hr>“;
print_r(‘call_user_func_array数组传值调用:’.call_user_func_array(‘dev’,array(8,4)));
//递归函数:
//自调用函数,也就是函数在函数体内部直接或间接地自己调用自己。需要注意的是使用递归函数时通常会在函数体中附加一个判断条件,以判断是否需要继续执行递归调用,当条件满足时会终止函数的递归调用。
//用递归函数求数的阶乘
function factorial($n){
if ($n == 1){
return 1;
}
else{
return $n * factorial($n-1);
}
}
echo factorial(4);
```