我想用 call_user_func_array 调用一个函数,但我注意到如果参数是函数定义中的引用并且是 call_user_func_array 中的简单值,则会出现以下警告: 警告:test() 的参数 1 应为引用,已给定值
这是我正在尝试做的一个简单示例:
<?php
$a = 0;
$args = array($a);
function test(&$a) {
$a++;
}
$a = 0;
call_user_func_array('test', $args);
?>
我的问题是:我怎么知道一个值(在本例中是 $args 的第一个值)是否是引用?
最佳答案
不,问题在于函数的第一个参数是按引用传递的(这意味着函数可以在调用者的范围内修改参数)。因此,您必须传递一个变量或可分配的东西作为第一个参数。当您创建像 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()
,然后搜索“&”符号:
> var_dump($args);
array(1) {
[0]=>
&int(1)
}
关于PHP如何知道一个变量是否是一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541865/