使用php回调函数call_user_func和call_user_func_array区别详解
call_user_func 函数类似于一种特别的调用函数的方法
1.调用 普通函数
<?php
function qipa($a,$b){
echo '$a的值是:'.$a;
echo "<br>";
echo '$b的值是:'.$b;
}
$a='我是奇葩';
$b='奇葩天地网QIPA250.COM';
call_user_func('qipa',$a,$b);
?>
结果显示:
$a的值是:我是奇葩
$b的值是:奇葩天地网QIPA250.COM
调用类内部的方法,用的是array,省去了new
2.调用 类的方法(包括类的静态的方法与实例对象方法)
<?php
class daqipa
{
function qipa($a, $b)
{
echo '$a的值是:' . $a;
echo "<br>";
echo '$b的值是:' . $b;
echo "<br>";
}
public static function meiriqipa($key)
{
echo '$key的值是:' . $key;
}
}
$a = '我是奇葩';
$b = '奇葩天地网';
$c = 'www.qipa250.com';
//当php <5.3时,可以如下使用,此时会把 b()方法当作是a的一个静态方式。
call_user_func(array("daqipa", "qipa"), $a, $b);
call_user_func("daqipa::qipa",$a, $b);
//当php >=5.3时,类的公开的非静态的方法必须在类实例化后方可被调用,否则会提示Strict性错误(为了兼容先前及以后的版本,还是用对象方法传入)。
$obj = new daqipa;
call_user_func(array($obj, "qipa"), $a,$b);
call_user_func(array($obj, "meiriqipa"), $c);
?>
结果显示
call_user_func_array函数 换了一种方式传递了参数,让参数的结构更清晰
语法
call_user_func_array($fun,$arr);
$a = '我是奇葩';
$b = '奇葩天地网';
$c = 'www.qipa250.com';
function qipa($a, $b)
{
echo '$a的值是:' . $a;
echo "<br>";
echo '$b的值是:' . $b;
echo "<br>";
}
call_user_func_array('qipa',array($a,$b));
显示结果
$a的值是:我是奇葩
$b的值是:奇葩天地网
call_user_func_array 函数也可以调用类内部的方法的,后面传参要以数组的形式传入
<?php
$a = '我是奇葩';
$b = '奇葩天地网';
$c = 'www.qipa250.com';
class daqipa
{
function qipa($a, $b)
{
echo '$a的值是:' . $a;
echo "<br>";
echo '$b的值是:' . $b;
echo "<br>";
}
public static function meiriqipa($key)
{
echo '$key的值是:' . $key;
}
}
//当php <5.3时,可以如下使用,此时会把 b()方法当作是a的一个静态方式。
call_user_func_array(array("daqipa", "qipa"), array($a, $b));
call_user_func_array("daqipa::qipa", array($a, $b));
//当php >=5.3时,类的公开的非静态的方法必须在类实例化后方可被调用,否则会提示Strict性错误(为了兼容先前及以后的版本,还是用对象方法传入)。
$obj = new daqipa;
call_user_func_array(array($obj, "qipa"), array($a, $b));//显示 111
call_user_func_array(array($obj, "meiriqipa"), array($c));//显示 111
?>