我想用call_user_func_array调用一个函数但是我注意到如果一个参数是函数定义中的引用并且是call_user_func_array中的一个简单值,则会出现以下警告: 警告:参数1 to test()应该是一个引用,给定值
以下是我想要做的一个简单示例:
<?php
$a = 0;
$args = array($a);
function test(&$a) {
$a++;
}
$a = 0;
call_user_func_array('test', $args);
?>
我的问题是:我怎么知道一个值(在这种情况下是$ args的第一个值)是否是引用?
答案 0 :(得分:3)
不,问题是函数的第一个参数是pass-by-reference(意味着函数可以修改调用者范围内的参数)。因此,您必须传递一个变量或可分配为第一个参数的内容。当您创建像array($a)
这样的数组时,它只是将变量$a
(即0)的值复制到数组的插槽中。它不以任何方式引用变量$a
。然后当你调用函数时,就好像你正在这样做,这不起作用:
test(0)
如果您真的想,可以通过引用将$a
放入数组中,但这有点棘手:
<?php
$a = 0;
$args = array(&$a);
function test(&$a) {
$a++;
}
call_user_func_array('test', $args);
?>
至于你怎么说,数组元素是一个引用......这很难。您可以在阵列上执行var_dump()
,然后搜索“&amp;”符号:
> var_dump($args);
array(1) {
[0]=>
&int(1)
}
答案 1 :(得分:1)
查看此PHP文档页面上的注释: