php通过引用差异传递

时间:2012-02-11 03:47:09

标签: php reference pass-by-reference

我这里有一个简单的问题。在函数参数中通过引用传递变量之间是否存在差异:

function do_stuff(&$a)
{
    // do stuff here...
}

并在以下函数中执行:

function do_stuff($a)
{
    $var = &$a;
    // do stuff here...
}

使用这两者之间有什么不同(如果有的话)?此外,任何人都可以给我一个很好的教程,解释通过引用传递?我似乎无法100%掌握这个概念。

谢谢

4 个答案:

答案 0 :(得分:1)

它们根本不相同。在第二个版本中,您将创建对未定义变量$a的引用,从而导致$var指向相同的空值。你在第二个版本中对$ var和$ a做的任何事情都不会影响函数之外的任何东西。

在第一个版本中,如果在函数内部更改$ a,则在函数返回后,新值将出现在外部。

答案 1 :(得分:1)

以下是一组示例,以便您了解每个问题会发生什么。 我还添加了第三个功能,它结合了你的两个问题,因为它也会产生不同的结果。

function do_stuff(&$a)
{
    $a = 5;
}

function do_stuff2($a)
{
    $var = &$a;
    $var = 3;
}

function do_stuff3(&$a)
{
    $var = &$a;
    $var = 3;
}

$a = 2;
do_stuff($a);
echo $a;
echo '<br />';

$a = 2;
do_stuff2($a);
echo $a;
echo '<br />';

$a = 2;
do_stuff3($a);
echo $a;
echo '<br />';

答案 2 :(得分:1)

在第一个示例中,如果以任何方式修改函数内部的$a,函数外部的原始值也将被修改。

在您的第二个示例中,无论您对$a或其引用$var所做的操作都将修改函数外的原始值。

答案 3 :(得分:0)

在第二个函数中,传递给函数的$a是传入的参数的副本,(除非$ a是一个对象),所以你要$var对它进行引用函数内部$a但它仍然与传递给函数的变量分开。

假设您使用的是最新版本的PHP,对象也会自动通过引用传递,因此可能会有所不同。