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 →
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com