PHP call_user_func_array function 处理函数



  • 定义和用法

    call_user_func_array - 调用回调函数,并把一个数组参数作为回调函数的参数
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
    5.3.0 对面向对象里面的关键字的解析有所增强。在此之前,使用两个冒号来连接一个类和里面的一个方法,把它作为参数来作为回调函数的话,将会发出一个E_STRICT的警告,因为这个传入的参数被视为静态方法。
    注意 PHP 5.4之前,如果param_arr里面的参数是引用传值,那么不管原函数默认的各个参数是不是引用传值,都会以引用方式传入到回调函数。虽然以引用传值这种方式来传递参数给回调函数,不会发出不支持的警告,但是不管怎么说,这样做还是不被支持的。并且在PHP 5.4里面被去掉了。而且,这也不适用于内部函数,如果使用函数签名设置,则必须接受该函数签名。如果调用函数签名设置需要接受的参数是引用传递的时候,按值传递,结果将会输出一个警告。call_user_func()将返回FALSE(但是,对于 传递了带有引用计数= 1的值(例如在文字中),因为这些值可以被转换为引用,而不会产生不良影响-但也不会写入对该值具有任何影响的引用- 但是,不要依赖此行为,因为引用计数是实现细节,并且此行为的合理性值得怀疑。
    注意 在函数中注册有多个回调内容时(如使用 call_user_func() 与 call_user_func_array()),如在前一个回调中有未捕获的异常,其后的将不再被调用。
  • 语法

    call_user_func_array( callable $callback , array $param_arr )
    
    call_user_func_array() 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。
  • 参数

    参数 必需的 描述
    callback 被调用的回调函数。
    param_arr 要被传入回调函数的数组,这个数组得是索引数组。
  • 返回值

    返回回调函数的结果。如果出错的话就返回FALSE
  • 示例

    function foobar($arg, $arg2) {
     echo __FUNCTION__, " got $arg and $arg2<br/>";
    }
    class foo {
     function bar($arg, $arg2) {
       echo __METHOD__, " got $arg and $arg2<br/>";
     }
    }
    
    
    // Call the foobar() function with 2 arguments
    call_user_func_array("foobar", array("one", "two"));
    
    // Call the $foo->bar() method with 2 arguments
    $foo = new foo;
    call_user_func_array(array($foo, "bar"), array("three", "four"));
    
  • 相关页面

    call_user_func() - 把第一个参数作为回调函数调用
    ReflectionFunction::invokeArgs() - 调用函数参数
    ReflectionMethod::invokeArgs() - 带参数执行