`

php函数call_user_func和call_user_func_array详解

    博客分类:
  • PHP
阅读更多

call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: 
function a($b,$c) 
{
echo $b;
echo $c;
}
call_user_func('a', "111","222");
call_user_func('a', "333","444");
//显示 111 222 333 444
?>

调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
class a {
function b($c) 
{
echo $c;
}
}
call_user_func(array("a", "b"),"111");
//显示 111
?>

call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
function a($b, $c) 
{
echo $b;
echo $c;

}
call_user_func_array('a', array("111", "222"));
//显示 111 222
?>

call_user_func_array函数也可以调用类内部的方法的

Class ClassA
{

function bc($b, $c) {
     $bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("111", "222"));

//显示 333
?>

call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:
function a(&$b)
{
$b++;
}
$c = 0;
call_user_func('a', &$c);
echo $c;//显示 1
call_user_func_array('a', array(&$c));
echo $c;//显示 2

 

 

今天在群里面,有个叫lewis的在问call_user_func_array的用法,因为之前一直没有用过,也不能说什么,于是看一下手册,发现是这么写的:

call_user_func_array

(PHP 4 >= 4.0.4, PHP 5)

call_user_func_array -- Call a user function given with an array of parameters

Description

mixed call_user_func_array ( callback function, array param_arr )

Call a user defined function given by function, with the parameters in param_arr
然后还有一个例子:

 

相信看了例子之后应该有点明白了吧?
我自己是这么理解这个函数的,如果说的不对,还望各位高手不要耻笑:
     该函数真正的用法有点类似于函数重载,因为他的第一个参数是字符型的,也就是函数的名称,第二个参数是数组,我们可以当成该函数的各个参数,而事实上也就是这么用的,如果你看过我的前一篇文章:PHP的伪重载 ,或许你能够理解,正是因为这个函数的存在,我发现函数重载也可以这样运用:

function otest1 ($a)
 {
    echo( '一个参数' );
}

function otest2 ( $a, $b)
{
     echo( '二个参数' );
  }

  function otest3 ( $a ,$b,$c)
  {
      echo( '三个啦' );
  }

 function otest ()
  {
     $args = func_get_args();
     $num = func_num_args();
      call_user_func_array( 'otest'.$num, $args   );
   }

  otest(1,2);
 

 

分享到:
评论

相关推荐

    php自定义函数call_user_func和call_user_func_array详解

    `call_user_func` 和 `call_user_func_array` 是 PHP 中两个非常实用的内置函数,用于动态调用其他函数或类的方法。这两个函数提供了一种灵活的方式来执行代码,特别是在需要动态处理函数名或方法名的场景下。 ### ...

    PHP 函数call_user_func和call_user_func_array用法详解

    call_user_func函数是当需要动态调用函数时,才使用的,这个函数有两种用法:第一种是调用孤独的函数:复制代码 代码如下:<?phpfunction funa($b,$c){ echo $b; echo $c;}call_user_func(‘funa’, “111”,”...

    php通过字符串调用函数示例

    本文将详细介绍两种实现这一目的的方式:`call_user_func` 和 `call_user_func_array` 函数,并结合具体示例进行解析。 #### 一、`call_user_func` `call_user_func` 是一个非常实用的函数,它允许我们通过字符串...

    PHP三种方式实现链式操作详解

    2. **使用魔法函数__call结合call_user_func_array实现** 类似于第一种方法,这里使用`__call`捕获未定义的方法,但不同的是,我们使用`call_user_func_array`来处理参数。`call_user_func_array`可以接收一个数组...

    PHP回调函数及匿名函数概念与用法详解

    这里定义了一个带有两个参数的`callback`函数,通过字符串名和`call_user_func`或`call_user_func_array`函数调用它。结果输出了两个参数的字符串。 实例1.3中演示了类方法和静态方法作为回调函数的使用。这里通过`...

    PHP回调函数与匿名函数实例详解

    本文实例讲述了PHP回调函数与匿名函数。分享给大家供大家参考,具体如下: 回调函数和匿名函数 ...PHP中有许多 “需求参数为函数” 的函数,像array_map,usort,call_user_func_array之类,他们执行传入的函数

    PHP实现链式操作的三种方法详解

    3. `call_user_func`和`call_user_func_array`是实现动态函数调用的两种方法,区别在于它们处理参数的方式。 4. 当不使用`__call`魔法函数时,可以直接在类中定义具体的方法实现,这种方法更简单且执行效率更高。 ...

    【基础篇】第09篇:PHP代码审计笔记--代码执行漏洞1

    5. **`call_user_func()` 和 `call_user_func_array()`** - **功能**: 这两个函数分别用于调用用户定义的回调函数,并传入参数。`call_user_func_array()`还可以接收一个参数数组。 - **风险**: 如果回调函数是由...

    yii2行为的方法如何注入到组件类中详解

    总之,通过理解Yii2中__call魔术方法的使用和call_user_func_array函数的作用,我们可以掌握如何将行为的方法注入到组件类中,从而在不修改组件类本身的情况下扩展其功能。这种机制增强了代码的可维护性和可重用性,...

    PHP中的函数声明与使用详解

    - 可以使用 `call_user_func()` 和 `call_user_func_array()` 来调用回调函数。 - `call_user_func()` 接受一个回调函数作为第一个参数,其余参数作为回调函数的参数传递。 - `call_user_func_array()` 接受一个...

    JS回调函数原理与用法详解【附PHP回调函数】

    `call_user_func`可以接受一个回调函数和它的参数,然后执行它。 ```php function getCounter() { $i = 0; return function() use ($i) { echo $i; }; } $counter = getCounter(); echo $counter(); // 输出 1...

    PHP实现简单MVC

    call_user_func_array([$controllerInstance, $method], $params); } else { // 处理无效的控制器或方法 } } else { // 处理无效的控制器 } } // 示例请求:/user/index parse_str(parse_url($_SERVER['...

    PHP定时执行任务实现方法详解(Timer)

    - 如果找到当前时间的任务,通过`call_user_func_array()`调用回调函数,并传递参数。 - 持久化的任务会在完成执行后重新添加到任务列表,等待下次唤醒。 在实际开发中,可以根据业务需求调整任务的调度策略,...

    PHP基础关键字介绍.docx

    echo call_user_func($func, 5); ``` - **iterable**: 可迭代类型,用于存储可以迭代的对象(如数组或实现了 Iterator 接口的对象)。 ```php $arr = [1, 2, 3]; foreach ($arr as $value) { echo $value . ...

    PHP引用(&)各种使用方法实例详解

    而在`call_user_func_array`函数中,如果需要引用传参,必须在参数前加上`&`。 3. **函数的引用返回** 函数可以返回一个引用,这在处理静态变量或对象属性时特别有用。例如: ```php function &test() { static...

Global site tag (gtag.js) - Google Analytics