call_user_func和call_user_func_array都是接收函数名和其他变量作为参数,然后call_user_func去调用,
这两个函数可以实现简单的反射。
简单调用:
function foo($arg,$arg2){
echo $arg;
echo $arg2;
}
call_user_func('foo',1,2);//12
还可以用数组的方式传参数,这种方式适合传递多个参数。
call_user_func_array('foo',array(3,4));//34
调用类函数:
class Bar{
static function foo($arg,$arg2){
echo $arg;
echo $arg2;
}
}
call_user_func(array('Bar','foo'),5,6);//56
call_user_func_array(array('Bar','foo'),array(7,8));//78
纠正:我看见很多博客是这样写的例子:
class Bar{
function foo($arg,$arg2){//注意,这里没有加static
echo $arg;
echo $arg2;
}
}
call_user_func(array('Bar','foo'),5,6);//56
call_user_func_array(array('Bar','foo'),array(7,8));//78
这样的写法会出现notice级别的错误提示,是因为php默认调用的foo方法是static的。
勉强只能这样写:
@call_user_func(array('Bar','foo'),5,6);//56
@call_user_func_array(array('Bar','foo'),array(7,8));//78
最后,我们把代码写在一起:
function foo($arg,$arg2){
echo $arg;
echo $arg2;
}
class Bar{
static function foo($arg,$arg2){
echo $arg;
echo $arg2;
}
}
call_user_func('foo',1,2);
call_user_func_array('foo',array(3,4));
call_user_func(array('Bar','foo'),5,6);
call_user_func_array(array('Bar','foo'),array(7,8));
网友评论