PHP中的引用赋值运算符,=&


Answers:


121

它不被弃用,而且不太可能被弃用。例如,这是一种标准方法,可以对一个数组或对象镜像进行更改,而对另一数组进行更改,而不是复制现有数据。

这称为按引用赋值,引用引用该手册,“意味着这两个变量最终都指向相同的数据,而没有任何内容被复制到任何地方”

不赞成使用的唯一方法PHP 5中的 “通过引用=&分配结果new” ,这可能是造成混淆的原因。是由引用自动分配的,因此在中是多余/已弃用,但在中却没有。new&$o = &new C;$o = &$c;


由于很难搜索,因此请注意=&等于&)与= &等于空格&)相同,并且通常这样编写,即它会遇到另一个变量,例如$x = &$y['z'];$x = &$someVar&符号美元符号变量名)。从文档简化的示例:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

这是指向PHP手册中“ 按引用分配”详细部分的便捷链接。该页面是参考文献系列的一部分-值得花一点时间阅读整个系列。


8
旁注:“因为很难搜索”symbolhound.com是您的朋友,喜欢这种东西。
billynoah '16

1
@billynoah哇!现在,symbolhound已永久添加到我的工具箱中。
Parapluie

26

这是两个不同的运算符。=是您可能知道的作业。并且&意味着该变量应通过引用而不是值进行访问。


60
抱歉,这太简单了。$ a =&$ b意味着使变量$ a引用与$ b现在所做的相同的事情。之后,$ a = 5;也会导致$ b具有5。但是,参考链接可能被$ b =&$ xyz;破坏。或未设置($ b); 那时$ a将是唯一知道保存5的单元格的位置的变量。另外请注意,如果使用=&设置$ a,则下次必须使用=&更改(或取消设置($ a))。 $ a的引用链接,特别是$ a = NULL;不会断开链接,只会将5替换为null;

8
@Don:感谢您的阐述。我可以告诉你是C程序员。
Asaph 2010年

8
我赞同唐的话。但是我不会说这太简单了。我会说这是错误的。
Artefacto

@Don您真的应该发表您的评论作为答案。
亚当

6
$x = &$y['z'];

还具有创建($y['z']如果不存在)并将其设置为的效果null

这样可以避免您可能想阅读的错误消息。我还没有找到关于此的文档。就我所知,这可能是5.3中的新功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.