PHP之call user func()函数

  在实际开发中通常会遇到这样的问题,决定调用某个函数是通过传入的参数决定的,例如:

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 ?>

 

posted @ 2016-08-24 17:02  Steven*  阅读(532)  评论(0编辑  收藏  举报