PHP函数补完:call_user_func()(转)
UCenter源代码里有一个函数call_user_func,开始以为是自己定义的函数,结果到处都找不到。后来才知道call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法。
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
01 |
<?php |
02 |
function nowamagic( $a , $b ) |
03 |
{ |
04 |
echo $a ; |
05 |
echo $b ; |
06 |
} |
07 |
call_user_func( 'nowamagic' , "111" , "222" ); |
08 |
call_user_func( 'nowamagic' , "333" , "444" ); |
09 |
//显示 111 222 333 444 |
10 |
?> |
调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也挺有新意的:
01 |
<?php |
02 |
class a { |
03 |
function b( $c ) |
04 |
{ |
05 |
echo $c ; |
06 |
} |
07 |
} |
08 |
call_user_func( array ( "a" , "b" ), "111" ); |
09 |
//显示 111 |
10 |
?> |
call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
1 |
<?php |
2 |
function a( $b , $c ) |
3 |
{ |
4 |
echo $b ; |
5 |
echo $c ; |
6 |
} |
7 |
call_user_func_array( 'a' , array ( "111" , "222" )); |
8 |
//显示 111 222 |
9 |
?> |
call_user_func_array函数也可以调用类内部的方法的:
01 |
<?php |
02 |
Class ClassA |
03 |
{ |
04 |
|
05 |
function bc( $b , $c ) { |
06 |
$bc = $b + $c ; |
07 |
echo $bc ; |
08 |
} |
09 |
} |
10 |
call_user_func_array( array ( 'ClassA' , 'bc' ), array ( "111" , "222" )); |
11 |
|
12 |
//显示 333 |
13 |
?> |
call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
01 |
<?php |
02 |
function a( $b ) |
03 |
{ |
04 |
$b ++; |
05 |
} |
06 |
$c = 0; |
07 |
call_user_func( 'a' , $c ); |
08 |
echo $c ; //显示 1 |
09 |
call_user_func_array( 'a' , array ( $c )); |
10 |
echo $c ; //显示 2 |
11 |
?> |
另外,call_user_func函数和call_user_func_array函数都支持引用。
01 |
<?php |
02 |
function increment(& $var ) |
03 |
{ |
04 |
$var ++; |
05 |
} |
06 |
$a = 0; |
07 |
call_user_func( 'increment' , $a ); |
08 |
echo $a ; // 0 |
09 |
call_user_func_array( 'increment' , array (& $a )); // You can use this instead |
10 |
echo $a ; // 1 |
11 |
?> |