call_user_func和call_user_func_array都是接收函數(shù)名和其他變量作為參數(shù)搁嗓,然后call_user_func去調(diào)用,
這兩個(gè)函數(shù)可以實(shí)現(xiàn)簡(jiǎn)單的反射舀射。
簡(jiǎn)單調(diào)用:
function foo($arg,$arg2){
echo $arg;
echo $arg2;
}
call_user_func('foo',1,2);//12
還可以用數(shù)組的方式傳參數(shù),這種方式適合傳遞多個(gè)參數(shù)氧猬。
call_user_func_array('foo',array(3,4));//34
調(diào)用類函數(shù):
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
糾正:我看見(jiàn)很多博客是這樣寫(xiě)的例子:
class Bar{
function foo($arg,$arg2){//注意,這里沒(méi)有加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
這樣的寫(xiě)法會(huì)出現(xiàn)notice級(jí)別的錯(cuò)誤提示坏瘩,是因?yàn)閜hp默認(rèn)調(diào)用的foo方法是static的盅抚。
勉強(qiáng)只能這樣寫(xiě):
@call_user_func(array('Bar','foo'),5,6);//56
@call_user_func_array(array('Bar','foo'),array(7,8));//78
最后,我們把代碼寫(xiě)在一起:
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));