call_user_func

来源:互联网 发布:dnf辅助端口团队 编辑:程序博客网 时间:2024/05/22 16:02

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;elsereturn 0;}function Descending($a,$b){if($a < $b)return 1;elsereturn 0;}?>


这是一个冒泡排序的小程序。

一般如果我们想控制正序还是倒序,最直接的办法是每一个$flag=1和$flag=2分别写一个BubbleSort函数,在函数中控制正倒序。

如果用可以把函数指针作为函数参数带到BubbleSort函数中,代码的可扩展性显而易见,这么做的好处是BubbleSort只实现排序,至于正序还是倒序交给其他函数去执行。

至于PHP的函数指针是否可以拿到,我并不敢下结论,如果有大牛知道,请留言,感激不尽。

在拿不到函数指针的情况下,我能想到的方法就是用call_user_func代替,关于这个函数的使用可以参考这篇文章:

http://www.nowamagic.net/librarys/veda/detail/1509

0 0
原创粉丝点击