回调函数与递归函数实例总结

2021年08月10日 18:34:32阅读数:167博客 / 超超多喝水 / PHP学习

一、回调函数

所谓回调函数,就是一个被作为参数传递的函数,php回调函数是指在主线程执行的过程中,突然跳去执行设置的回调函数,回调函数执行结束后,在回到主线程处理下面的流程。

实例

<?php
 //声明一个匿名函数 里面有$a,$b两个形参
 $func = function($a,$b)
 {
     //返回$a+$b
     return $a+$b;
     //匿名函数后面别忘了;
 };
//声明一个函数test,里面两个形参,Closure代表匿名函数类,callback的中文意思回调函数,这里的$callback是个形参,代表了那个函数,这俩在一块应该是代表回调一个匿名函数类,作用是可以回调一个匿名函数
 function test(Closure $callback)
{
    //定义两个局部变量$a,$b
    $a = 10;
    $b = 20;
    //输出把两个值赋给回调函数后的结果
    echo $callback($a,$b);
}
//调用test函数并将$func这个匿名函数作为实参传入
test($func);

运行实例 »

点击 "运行实例" 按钮查看在线实例

二、递归函数

所谓递归函数,就函数自身调用自身,但是这里需要在函数开始调用之前做判断,否则会陷入死循环,以清理缓存目录为例(注意清理缓存目录的文件,一定不要跟缓存目录在一起,否则会把清理文件也处理掉,且最开始的父级目录在文件被清除后将无法执行清楚命令):

实例

<?php
//定义一个清空缓存的函数
function del($dir)
{
    //判断当前文件夹是否是一个正确的文件夹(即判断是否是一个合法的目录)
    if(is_dir($dir))
    {
        //定义一个初始值,默认未被删除
        $flag = false;
        //opendir()成功返回resource,失败返回false,上面判断是一个合法目录,这里打开目录流并赋值给一个变量,方便后面关闭
        if($handle = opendir($dir))
        {
            //开始循环读取opendir返回的resource,readdir()从目录句柄中读取条目,成功则返回下一个文件的文件名。文件名以在文件系统中的排序返回。失败返回false
            //判断不为false时进入循环
            while(($file = readdir($handle))!==false)
            {
                // echo "$file<hr>";//输出的时候除了文件跟文件夹的列表,还能看到.跟..,一个点代表存在同级目录,两个点代表存在上级目录
                if($file!='.'&&$file!='..')
                {
                    //这里可能又有文件夹,判断当前文件夹是否是一个正确的文件夹,这里跟最开始的路径拼接
                    if(is_dir($dir.'\\'.$file))
                    {
                        //调用本函数,递归处理文件夹(处理目录)
                        del($dir.'\\'.$file);
                    }else{
                        //处理文件 这里还是$dir.'\\'.$file,这里判断了他非目录 那他就是一个文件,文件就用unlink()函数直接删除
                        unlink($dir.'\\'.$file);
                    }
                }
            }
        }
        //关闭目录句柄
        closedir($handle);
        //目录只有为空才能被程序删除 rmdir()删除空文件夹
        if(rmdir($dir))
        {
            //处理后将最开始定义的初始值赋值为true,代表已经删除
            $flag = true;
        }
    }
}
//当前路径,建议使用绝对路径,我这边是使用__DIR__魔术常量定位到当前的绝对路径,然后往上找到同级的0807文件夹下,调用的0807文件夹
$path = __DIR__.'\\..\\0807';
//调用函数之前可以先看看路径是否正确
echo $path;
//执行函数
del($path);
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例


批改状态:合格

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    超超多喝水
    博文
    41
    粉丝
    0
    评论
    0
    访问量
    3435
    积分:0
    P豆:82