我这里有一个简单的问题。在函数参数中通过引用传递变量之间是否存在差异:
function do_stuff(&$a)
{
// do stuff here...
}
并在以下函数中执行:
function do_stuff($a)
{
$var = &$a;
// do stuff here...
}
使用这两者之间有什么不同(如果有的话)?此外,任何人都可以给我一个很好的教程,解释通过引用传递?我似乎无法100%掌握这个概念。
谢谢
答案 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,对象也会自动通过引用传递,因此可能会有所不同。