2012-02-11 93 views
0

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

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

,做它的函数里面,如:

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

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

谢谢

回答

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 />'; 
0

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

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

+0

我修改了它,参见编辑 – user765368 2012-02-11 03:51:31

+0

通过引用访问“对象”,这些引用是通过值传递的,除非您明确地通过引用传递 – newacct 2012-02-11 10:25:25

1

它们完全不等价。在第二个版本中,您正在创建对未定义变量$a的引用,导致$var指向相同的空值。你在第二个版本中对$ var和$ a做的任何操作都不会影响函数以外的任何内容。

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

1

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

在你的第二个例子,不管你做什么,以$a或其参考$var修改功能外原始值。