php学习之道:call_user_func和call_user_func_array的用法 call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] ) 调用第一个参数所提供的用户自定义的函数。返回值:返回调用函数的结果,或FALSE。example : Php代码 function eat($fruit) //参数可以为多个 { echo "You want to eat $fruit, no problem"; } call_user_func('eat', "apple"); //print: You want to eat apple, no problem; call_user_func('eat', "orange"); //print: You want to eat orange,no problem; ?> 调用类的内部方法: Php代码 class myclass { function say_hello($name) { echo "Hello!$name"; } } $classname = "myclass"; //调用类内部的函数需要使用数组方式 array(类名,方法名) call_user_func(array($classname, 'say_hello'), 'dain_sun'); //print Hello! dain_sun ?> call_user_func_array 函数和 call_user_func 很相似,只是 使 用了数组 的传递参数形式,让参数的结构更清晰: call_user_func_array ( callback $function , array $param_arr ) 调用用户定义的函数,参数为数组形式。返回值:返回调用函数的结果,或FALSE。 Php代码 function debug($var, $val) { echo "variable: $var value: $val "; echo ""; } $host = $_SERVER["SERVER_NAME"]; $file = $_SERVER["PHP_SELF"]; call_user_func_array('debug', array("host", $host)); call_user_func_array('debug', array("file", $file)); ?> 调用类的内部方法和 call_user_func 函数的调用方式一样,都是使用了数组的形式来调用。 exmaple: Php代码 class test { function debug($var, $val) { echo "variable: $var value: $val "; echo ""; } } $host = $_SERVER["SERVER_NAME"]; $file = $_SERVER["PHP_SELF"]; call_user_func_array(array('test', 'debug'), array("host", $host)); call_user_func_array(array('test', 'debug'), array("file", $file)); ?> 注:call_user_func 函数和call_user_func_array函数都支持引用。 Php代码 function increment(&$var) { $var++; } $a = 0; call_user_func('increment', $a); echo $a; // 0 call_user_func_array('increment', array(&$a)); // You can use this instead echo $a; // 1 ?>