一些函数如usort和call_user_func()可以作为用户自对应函数做为回调参数,回调函数不止是简单的函数,还可以是对象的方法(类方法),包括静态方法。
用户自定义函数作为回调函数的参数,PHP将函数以string形式传递的。可以使用任何内置或者用户自定义函数,除了PHP的语言结构如:array(), echo, empty(), eval(), exit(), isset(), list(), print或者unset()。
1,用usort()函数传递用户自定义函数对美国日期进行排序:
1 Sorting the \$dates using the function sort().
";
11 sort($dates);
12 print_r($dates); #打印输出:Array ( [0] => 1-01-2013 [1] => 10-10-2011 [2] => 10-10-2012 [3] => 2-16-2011 [4] => 2-17-2010 )
13
14 #使用natsort()函数对人类认为的自然排序;
15 echo "
Sorting the \$dates using the function natsort().
";
16 natsort($dates);
17 print_r($dates); #打印输出:Array ( [0] => 1-01-2013 [3] => 2-16-2011 [4] => 2-17-2010 [1] => 10-10-2011 [2] => 10-10-2012 )
18
19 #前两种都不符合预期,试用usort()函数对$dates进行排序;
20 function sortDate($a,$b){
21 if ($a == $b){
22 return 0;
23 }else{
24 #将日期进行分割,对应的月日年分别赋值给对应的month,day,year。
25 list($amonth, $aday, $ayear) = explode("-", $a);
26 list($bmonth, $bday, $byear) = explode("-", $b);
27
28 #调用str_pad()函数对月份字符串进行填充。如果月份有两位则不填充,如果不够两位就在其左侧填充0;
29 $amonth = str_pad($amonth, 2, "0", STR_PAD_LEFT);
30 $bmonth = str_pad($bmonth, 2, "0", STR_PAD_LEFT);
31
32 #调用str_pad()函数对日期的字符串进行填充。如果日期有两位数则不填充,如果不够两位就在其左侧填充0;
33 $aday = str_pad($aday, 2, "0", STR_PAD_LEFT);
34 $bday = str_pad($bday, 2, "0", STR_PAD_LEFT);
35
36 #由于年份是四位,就不需要进行填充了,练手的话可以写一下
37 #ayear = str_pad($ayear, 4, "0", STR_PAD_LEFT);
38 #byear = str_pad($byear, 4, "0", STR_PAD_LEFT);
39
40 #对日期进行重组,按年月日的人类习惯进行重组
41 $a = $ayear . $amonth . $aday;
42 $b = $byear . $bmonth . $bday;
43
44 #返回值进行比较
45 return ($a > $b) ? 1: -1; //升序排序
46 #return ($a < $b) ? 1 : -1; //降序排列
47 }
48 }
49
50 echo "
Sorting the \$dates using the function usort().
";
51 usort($dates, "sortDate"); #函数回调,usort()函数回调自定义函数sortDate(),以字符串的形式作为参数传递到usort()。
52 print_r($dates); #打印输出:Array ( [0] => 2-17-2010 [1] => 2-16-2011 [2] => 10-10-2011 [3] => 10-10-2012 [4] => 1-01-2013 )
53 ?>
2,call_user_func()调用自定义函数:
1
回到函数类与对象的应用:
一个已被实例化的object的方法被作为array传递,下表0包含该object,下表1包含方法名。在同一个类里可以访问protected和private方法。
1,简单调用:
1
2,父子调用:
1
array_map()回调函数:
1