是否通过引用传递变量?

时间:2011-11-25 21:13:05

标签: php variables reference

SO上的comment上有一个answer

答案中的代码:

$larry = & $fred;

注释:

  

这已被弃用并生成警告

但我不认为这是正确的。或者是吗?

基本上问题是:

我可以通过引用将变量复制到另一个变量吗?

3 个答案:

答案 0 :(得分:7)

取决于变量$fred是什么类型。如果它是一个对象,它将作为引用传递一个指向该对象的指针(感谢NikiC)将从PHP 5开始作为值传递,因此不需要明确地执行它。到目前为止,评论是正确的。

但是,对于所有其他变量类型,需要显式指定传递引用,并且不推荐使用。虽然可以说在PHP中使用大量引用通常不是很好的编程习惯。

答案 1 :(得分:2)

很确定它没有被弃用。在PHP 5.3中,我一直在做很多事情,基本上是为一个深层嵌套的数组做别名。例如:

$short = &$a['really']['deep']['array']

当您执行$a = $b并且$a是对象时,它会创建一个“引用”。最好用一个例子说明这一点:

>> $o = new stdClass()
stdClass::__set_state(array(
))
>> $o->a = 5
5
>> $o
stdClass::__set_state(array(
   'a' => 5,
))
>> $o2 = $o
stdClass::__set_state(array(
   'a' => 5,
))
>> $o2->a = 6
6
>> $o
stdClass::__set_state(array(
   'a' => 6,
))

请注意,$o->a$o2->a现在都是6,即使我们只对其中一个进行了分配。

$a是一个原语(或PHP中的标量)时,如string,int或float,它的行为有点不同;变量被复制:

>> $a = 1
1
>> $b = $a
1
>> $b = 2
2
>> $a
1

请注意,$a仍为1。

但是,当您使用&符时,它基本上用作别名。对一个变量的任何更改都会影响另一个变量。

>> $c = 1
1
>> $d = &$c
1
>> $d = 2
2
>> $c
2

请注意,$c现在也是2。

答案 2 :(得分:0)