首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

call_user_func_array

(PHP 4 >= 4.0.4, PHP 5, PHP 7)

call_user_func_array - 用一组参数调用回调

Description

代码语言:javascript
复制
mixed call_user_func_array ( callable $callback , array $param_arr )

callback通过参数中的第一个参数调用给定的参数param_arr

参数

callback

可调用的被调用。

param_arr

作为索引数组传递给回调的参数。

返回值

返回回调的返回值,或者出错时返回FALSE

Changelog

版本

描述

5.3.0

像父母和自我这样的面向对象关键字的解释已经改变。以前,使用双冒号语法调用它们会发出E_STRICT警告,因为它们被解释为静态。

示例

Example #1 call_user_func_array() example

代码语言:javascript
复制
<?php
function foobar($arg, $arg2) {
    echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}


// 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"));
?>

上面的例子会输出类似于:

代码语言:javascript
复制
foobar got one and two
foo::bar got three and four

Example #2 call_user_func_array() using namespace name

代码语言:javascript
复制
<?php

namespace Foobar;

class Foo {
    static public function test($name) {
        print "Hello {$name}!\n";
    }
}

// As of PHP 5.3.0
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));

// As of PHP 5.3.0
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));

?>

上面的例子会输出类似于:

代码语言:javascript
复制
Hello Hannes!
Hello Philip!

Example #3 Using lambda function

代码语言:javascript
复制
<?php

$func = function($arg1, $arg2) {
    return $arg1 * $arg2;
};

var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */

?>

上面的例子将输出:

代码语言:javascript
复制
int(8)

Example #4 Passing values by reference

代码语言:javascript
复制
<?php

function mega(&$a){
    $a = 55;
    echo "function mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo "global \$bar=$bar\n";

?>

上面的例子将输出:

代码语言:javascript
复制
function mega $a=55
global $bar=55

笔记

注意:在PHP 5.4之前param_arr,不管函数是否期望通过引用传递相应的参数,引用的变量都通过引用传递给函数。这种按引用时间传递的形式不会发出弃用通知,但仍然被弃用,并且已在PHP 5.4中删除。此外,这不适用于内部函数,函数签名被尊重。当函数根据引用期望参数值时传递值会导致警告并返回call_user_func()FALSE (但是,对于引用计数= 1的传入值(例如文字),有一个例外,因为这些值可以转换为引用而不会产生不良影响 - 但也不会写入具有任何效果的值 -;不依赖于此行为,尽管如此,由于引用计数是实现细节,并且此行为的可靠性值得怀疑)。

注意:如果在以前的回调中存在未捕获的异常,则不会调用使用call_user_func()和call_user_func_array()等函数注册的回调函数。

See Also

  • call_user_func() - 调用第一个参数给出的回调
  • information about the callback type
  • ReflectionFunction::invokeArgs() - Invokes function args
  • ReflectionMethod::invokeArgs() - Invoke args

call_user_func →

扫码关注腾讯云开发者

领取腾讯云代金券