欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-13 12:35:17
...

一、回调函数

所谓回调函数,就是一个被作为参数传递的函数,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);
?>

运行实例 »

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