Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
所谓回调函数,就是一个被作为参数传递的函数,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); ?>
点击 "运行实例" 按钮查看在线实例