首页
学习
活动
专区
工具
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 →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com