在线文档教程
PHP
类和函数 | Classes and Functions

call_user_func_array

call_user_func_array

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

call_user_func_array - 用一组参数调用回调

Description

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

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

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

foobar got one and two foo::bar got three and four

Example #2 call_user_func_array() using namespace name

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

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

Hello Hannes! Hello Philip!

Example #3 Using lambda function

<?php $func = function($arg1, $arg2) {     return $arg1 * $arg2; }; var_dump(call_user_func_array($func, array(2, 4)) /* As of PHP 5.3.0 */ ?>

上面的例子将输出:

int(8)

Example #4 Passing values by reference

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

上面的例子将输出:

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

← Function handling Functions

call_user_func →