一,变量可以直接传递函数

<?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"));

  

  

04-18 18:59