一,变量可以直接传递函数
<?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) { echo $i."<br>"; } } } function funcall($i) { return $i%2==0; } demo(100,"funcall");
二, 使用call_user_func_array
<?php function demo($num , $n ) { for($i=0;$i<$num;++$i) { if(call_user_func_array($n,array($i))) { echo $i."<br>"; } } } function funcall($i) { return $i%2==0; } demo(100,"funcall");
三,类中函数作为回调函数
(1)类成员函数
<?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) //if(call_user_func_array($n,array($i))) { echo $i."<br>"; } } } function funcall($i) { return $i%2==0; } class Filter { function fun($i) { return $i%2==0; } static function sfun($i) { return $i%3 ==0; } } demo(100,array(new Filter(),"fun"));
(2)类静态函数
<?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) //if(call_user_func_array($n,array($i))) { echo $i."<br>"; } } } function funcall($i) { return $i%2==0; } class Filter { function fun($i) { return $i%2==0; } static function sfun($i) { return $i%3 ==0; } } demo(100,array("Filter","sfun"));