不理解php.net

时间:2015-11-29 08:09:37

标签: php

我不理解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";
?>
什么阵列(&amp; $ a)意味着什么? $ a的初始价值是什么?

1 个答案:

答案 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