在实际开发中通常会遇到这样的问题,决定调用某个函数是通过传入的参数决定的,例如:
1 $functionName=$_post['functionName'];
接着我们需要访问一个叫$functionName的方法,PHP有一个内置函数call_user_func,该函数允许用户调用直接写的函数并传入一定的参数:
1、最普通的调用:
1 <?php 2 function order($a,$b) 3 { 4 echo $a; 5 echo $b; 6 } 7 call_user_func('order', "",""); 8 ?>
2、调用类内部的方法
1 <?php 2 class utils { 3 function class1($a) 4 { 5 echo $a; 6 } 7 } 8 call_user_func(array("utils", "class1"),""); 9 ?>
3、call_user_func_array函数类似于call_user_func,前者将传递的参数放到了一个数组中
1 <?php 2 function class1($a, $b) 3 { 4 echo $a; 5 echo $b; 6 } 7 call_user_func_array('class1', array("", "")); 8 ?>
4、call_user_func_array函数也可以这么玩
1 <?php 2 Class Class1 3 { 4 function person($b, $c) { 5 echo $b; 6 echo $c; 7 } 8 } 9 call_user_func_array(array('Class1','person'), array("", "")); 10 ?>
call_user_func调用自定义函数
调用第一个参数提供的自定义函数,后面的参数为自定义函数的参数,返回自定义函数的结果
1 function say($word) 2 { 3 echo $word; 4 } 5 call_user_func('say', 'hello world'); 6 7 8 //当然也可以调用类中的方法: 9 class A { 10 function say($word = '') 11 { 12 echo $word; 13 } 14 } 15 $a = new A(); //注意,必须是要实例化的,除非是static 16 call_user_func(array($a, 'say'), 'hello world'); //hello world
call_user_func_array调用自定义函数
1 function a($word) 2 { 3 echo $word; 4 } 5 class A { 6 function say($word = '') 7 { 8 echo $word; 9 } 10 } 11 call_user_func_array('a', array('hello world')); 12 $a = new A(); //注意,必须是要实例化的,除非是static 13 call_user_func_array(array($a, 'say'), array('hello world')); //只是传入参数有点区别
两个函数都支持引用:
1 <?php 2 function a($b) 3 { 4 $b++; 5 } 6 $c = ; 7 call_user_func('a', $c); 8 echo $c; 9 call_user_func_array('a', array($c)); 10 echo $c; 11 12 13 //call_user_func函数和call_user_func_array函数都支持引用。 14 15 function increment(&$var) 16 { 17 $var++; 18 } 19 $a = ; 20 call_user_func('increment', $a); 21 echo $a; 22 call_user_func_array('increment', array(&$a)); 23 echo $a; 24 ?>