答案中的代码:
$larry = & $fred;
注释:
这已被弃用并生成警告
但我不认为这是正确的。或者是吗?
基本上问题是:
我可以通过引用将变量复制到另一个变量吗?
答案 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)