您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
php回调、递归、匿名与闭包学习笔记-回调函数
发布时间:2018-04-30 11:37:21编辑:雪饮阅读()
回调函数
<?php
//在函数的调用时,在参数中传的不是一个变量或一个值,而是一个函数,这就是回调函数参数
//如下,要对一个数值型数组元素进行从小到大排序,只需要给sort函数的参数以一个数组引用(参数要求引用,则函数对其处理后,那么原参数对应的引用对象也会改变)即可
/*
$arr=array(1,5,8,9,3,2,6,7);
print_r($arr);
sort($arr);
echo "<br/>";
print_r($arr);
*/
//但是我们想要从大到小排序,则需要修改默认的排序规则,usort函数就是提供给用户自己进行排序的,可以传入一个函数(排序规则)作为参数,那么我们无论从小向大排序或者从大向小排序都是可以的
//usort函数会自动将数组中相邻两个元素每次循环给用户自定义函数的对应两个参数,提供给用户用来定义自己的排序规则
/*
$arr=array(1,5,8,9,3,2,6,7);
function mySort($a,$b){
if($a>$b) return -1;
if($a<$b) return 1;
return 0;
}
print_r($arr);
usort($arr,"mySort");
echo "<br/>";
print_r($arr);
*/
//再如,我们这里数组压根不是纯数字的,而是纯字母的字符串元素,我们需要按照每个元素的字符串长度来排序
//php5.3.5及以上支持函数体作为参数而不仅仅是函数名
$arr=array("aa","aaac","b","baba","ba","babadasa","asla","hjjfjgffgjfgj","dmj","xy");
function mySort($a,$b){
if(strlen($a)>strlen($b)) return -1;
if(strlen($a)<strlen($b)) return 1;
return 0;
}
print_r($arr);
usort($arr,"mySort");
echo "<br/>";
print_r($arr);
自己制作回调函数
<?php
//调用回调函数的函数
function demo($num,$f){
for($i=0;$i<$num;$i++){
if(!$f($i)) continue;
echo $i."<br/>";
}
}
//需求:对从0到100的数字包含3的数字输出
function bh3($i){
if(preg_match('/3/',$i)) return true;
return false;
}
//需求:对从0到100的数字是5的倍数的数字输出
function bs5($i){
if($i%5==0) return true;
return false;
}
//需求:对从0到100的数字是回文数的数字输出
function hws($i){
if($i==strrev($i)) return true;
return false;
}
//完成对从0到100的数字包含3的数字输出
//demo(100,'bh3');
//完成对从0到100的数字是5的倍数的数字输出
//demo(100,'bs5');
//完成对从0到100的数字是回文数的数字输出
demo(100,'hws');
call_user_func_array回调函数的用法
<?php
/*
call_user_func_array的用法
在带参函数调用的时候有直接调用如myfun($a,$b)这种方式,还可以使用call_user_func_array将调用时要传递的参数整体打包为数组
,那么此时被调用函数中第一个参数就对应接收数组中的第一个元素,以此类推。
*/
function myfun($one="1",$two="2",$three="3"){
echo "$one --- $two --- $three <br/>";
}
//直接调用myfun
myfun(11,22,33);
//使用call_user_func_array调用
call_user_func_array('myfun',array(111,222,333,444));
call_user_func_array的使用场景(回调为对象的方法或类的方法时的调用)
<?php
//用传统的回调函数即通过变量调用来调用回调在面向对象中并不适用,因为传统的回调函数传入参数为方法名的字符串
//那么对象中的方法,或类的静态方法则没有办法调用,这就用到了call_user_func_array进行调用,如:
function demo($num,$obj){
for($i=0;$i<$num;$i++){
if(!call_user_func_array($obj,array($i))) continue;
echo "$i<br/>";
}
}
class Filter{
function one($i){
if($i%3==0) return true;
return false;
}
static function two($i){
if(preg_match('/3/',$i)) return true;
return false;
}
}
$filter=new Filter();
//demo(500,array(new Filter(),"one"));
demo(500,array("Filter","two"));
?>
关键字词:php,回调
上一篇:swoole学习笔记-附件