c语言中可以把函数指针作为另一个函数的参数传递,PHP显然没有C语言可以那么灵活控制指针,在实际实现中,我觉得可以用call_user_func代替。代码如下
<?php
$flag = 1;//or $flag = 2;
$arr = array(2,34,5,3,68,56,35,44,54,78,9,7,3,21);
switch($flag){
case 1:
BubbleSort($arr,'Ascending');
break;
case 2:
BubbleSort($arr,'Descending');
break;
}
var_dump($arr);
function BubbleSort(&$arr,$fun){
for($i=0;$i<count($arr);$i++){
for($j=0;$j<count($arr)-1;$j++){
if(call_user_func($fun,$arr[$j],$arr[$j+1])){//也可以用$fun($arr[$j],$arr[$j+1])代替
$t = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $t;
}
}
}
return $arr;
}
function Ascending($a,$b){
if($a > $b)
return 1;
else
return 0;
}
function Descending($a,$b){
if($a < $b)
return 1;
else
return 0;
}
?>
这是一个冒泡排序的小程序。
一般如果我们想控制正序还是倒序,最直接的办法是每一个$flag=1和$flag=2分别写一个BubbleSort函数,在函数中控制正倒序。
如果用可以把函数指针作为函数参数带到BubbleSort函数中,代码的可扩展性显而易见,这么做的好处是BubbleSort只实现排序,至于正序还是倒序交给其他函数去执行。
至于PHP的函数指针是否可以拿到,我并不敢下结论,如果有大牛知道,请留言,感激不尽。
在拿不到函数指针的情况下,我能想到的方法就是用call_user_func代替,关于这个函数的使用可以参考这篇文章: