我不理解php.net中的以下示例。任何人都可以解释一下吗?
<?php
error_reporting(E_ALL);
function increment(&$var)
{
$var++;
}
$a = 0;
call_user_func('increment', $a);
echo $a."\n";
// You can use this instead
call_user_func_array('increment', array(&$a));
echo $a."\n";
?>
答案 0 :(得分:0)
docs表示“call_user_func()的参数未通过引用传递”。在给定的例子中
function increment(&$var)
{
$var++;
}
call_user_func('increment', $a);
$a
的值不会增加,PHP会引发警告Parameter 1 to increment() expected to be a reference, value given
。不会执行callabe中的代码,但call_user_func()
的结果为NULL。
您无法使用call_user_func('increment', &$a)
调用该函数,因为在PHP 5.4中已删除Call-time pass-by-reference
。
这就是示例应该展示的内容。
使用call_user_func_array()
允许参数作为参考传递,因此
$a = 0;
call_user_func_array('increment', array(&$a));
是1。
要在没有引用的情况下使用callable,return
函数中的值,并将此返回值分配给$ a:
function increment($var)
{
$var++;
return $var;
}
$a = 0;
$a = call_user_func('increment', $a);
print 'a: ' . $a . PHP_EOL;
结果:
a: 1