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
call_user_func →