PHP 中 call_user_func 函数 和 call_user_func_array 函数

PHP 中 call_user_func() 函数 和 call_user_func_array()函数都是回调函数

区别:

  • call_user_func()
    可以有多个参数,第一个参数为被调用的回调函数,除了第一个参数外,其他参数均为被调用函数的参数
  • call_user_func_array()
    只有两个参数,第一个参数为被调用的回调函数,第二个参数是要被传入回调函数的数组,这个数组必须是索引数组。

事例一:

  • call_user_func() 函数 和 call_user_func_array()区别
";
    print_r($args);
    echo "
"; } $arr = array( 'name' => 'liuli', 'sex' => 'boy' ); ------------------------------------------------------------------------------ call_user_func('callBack', $arr); #输出结果 1个参数: Array ( [0] => Array ( [name] => liuli [sex] => boy ) ) ------------------------------------------------------------------------------ call_user_func_array('callBack', $arr); #输出结果 2个参数: Array ( [0] => liuli [1] => boy )

事例二:

  • 匿名函数传参

案例三:

  • 回调函数是匿名函数,并且匿名函数不设参数,通过其他方式获取参数的情况

事例四:

  • 调用没有命名空间类的方法
class Func{
    //静态方法
    static public function _func(){
        $str =  'THE CLASS NAME IS '.__CLASS__.' AND CLASS STATIC METHOD IS '.__METHOD__;
        if(func_num_args()){
            //获取函数参数,获取参数也可以通过给方法设置形参来获取,这里只是没给方法设置形参获取参数的情况
            $arg = func_get_arg(0);
            return $str.' and argument is '.$arg;
        }else{
            return $str;
        }
    }
    //普通方法
    public function __func($num){
        return $num ? $num+1:$num;
    }
}
//传递类的静态方法,有两种方式
//(1)种,传递····类名::方法名····
var_dump(call_user_func("Func::_func",'hell world'));//这里传递参数
//(2)种,传递类名和方法名的数组
var_dump(call_user_func(array('Func','_func')));//这里没有传参数
$num = 4;
$o = new Func;
//传递类普通方法必须用···数组···传递···该类的对象··和···方法名···
$return = call_user_func(array($o,'__func'),$num);
var_dump($return);
#输出结果
string(88) "THE CLASS NAME IS Func AND CLASS STATIC METHOD IS Func::_func and argument is hell world" string(61) "THE CLASS NAME IS Func AND CLASS STATIC METHOD IS Func::_func" int(5)

事例五:

  • 调用有命名空间的类方法的情况
 int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }

事例六:

  • 调用php内置函数
$return = call_user_func('rtrim','sso;osoo;',';');
$return2 = call_user_func('explode',';','sso;osoo;');

#输出结果
string(8) "sso;osoo" array(3) { [0]=> string(3) "sso" [1]=> string(4) "osoo" [2]=> string(0) "" }

总结

  • call_user_func_array同理
  • 调用静态方法第一参数的两种方式:
    call_user_func("Func::_func", 'hello world')
    call_user_func(array('Func','_func'))
  • 调用普通方法的方式:
    call_user_func(array(new之后的对象, 方法名), 参数);
    例如:
$num = 4;
$o = new Func;
$return = call_user_func(array($o,'__func'),$num);

你可能感兴趣的:(PHP 中 call_user_func 函数 和 call_user_func_array 函数)