因为刚接触php所以今天在工作用遇到一个函数call_user_func_array,不懂,于是就去搜了一下,本想这只搜这个函数的用法,结果,搜到的不止这个,还有很多函数的用法,外加一个惊喜,因为这些函数的存在,php函数的重载也可以这么利用!!
首先说两个简单的,基础的,后面会例子里面会用到的:func_get_args和func_num_args,从名字看就大概猜的到了。
func_get_args是获取函数的参数列表,是数组类型,这个要注意。
func_num_args是获取函数的参数的个数。
然后就是主要的两个函数了:call_user_func和call_user_func_array,这两个都是动态调用函数时经常用到的。
call_user_func:
1、第一种是调用孤独的函数:
function funa($b,$c) { echo $b; echo $c; } call_user_func('funa', "111","222"); call_user_func('funa', "333","444"); //显示 111 222 333 4442、 第二种是调用类内部的函数:
class a { function b() { $args = func_get_args(); $num = func_num_args(); print_r($args); echo $num; } } call_user_func(array("a", "b"),"111","222");这个结果大家应该看的出来的,如果不确定最好自己运行下试试。
call_user_func_array:用法和call_user_func接近,只是参数传入的是数组。
1、同call_user_func一样
function a($b, $c) { echo $b; echo $c; } call_user_func_array('a', array("aa", "ss")); //显示 aa ss
2、可以调用类内部函数
Class ClassA { function bc($b, $c) { $bc = $b + $c; echo $bc; } } call_user_func_array(array('ClassA','bc'), array("1", "2")); //显示 3下面是一个更好的例子,实现了函数的重载
function test1($a){ echo ('一个参数'."\n"); } function test2($a,$b){ echo ('两个参数'."\n"); } function test3($a, $b, $c){ echo ('三个参数'."\n"); } function test(){ $args = func_get_args(); $num = func_num_args(); call_user_func_array('test'.$num, $args ); } test("a"); test("a", "b"); test("a", "b", "c");这个非常建议大家自己写一下运行看下效果,其中里面的代码写的也很精简,值得学习。
以上就是因为一个函数引来的收获,哈哈
ps:以上例子很内容是由参考别人文章后自己终结点