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

在PHP中, =& (等号和赋值)赋值操作符是做什么的?

它是否被弃用?

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

这就是所谓的按引用分配,引用手册, “这意味着两个variables最终指向相同的数据,并没有任何地方复制” 。

在PHP 5中 ,唯一被“ =& ”弃用的是“通过引用分配new的结果”,这可能是任何混淆的根源。 new是通过引用自动分配的,所以&$o = &new C;是冗余/不赞成的$o = &new C; ,但不在$o = &$c;


由于很难search,所以注意=&等号符号 )和= &等于空间& 符号 )是相同的,并且通常被写成使得它运行到另一个variables中,例如$x = &$y['z'];$x = &$someVar&符美元符号variables名称 )。 从文档简化示例:

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

这里有一个方便的链接, 详细介绍了PHP手册中的“ 按引用分配”部分 。 该页面是参考文献系列的一部分 – 值得花一点时间阅读整个系列。

这是两个不同的运营商。 =是你可能知道的任务。 &表示variables应该通过引用而不是按值来访问。

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

如果它不存在,也会创build$y['z'] ,并将其设置为null

这可以防止您可能想读取的错误消息。 我还没有find这方面的文件, 对于我所知道的,在5.3中可能是新的。

引用@Don的评论,因为这是对这个问题很好解释的答案。

我很抱歉,但这太简单了。 $ a =&$ b表示使variables$ a引用与$ b现在相同的东西。 在此之后,$ a = 5; 也会导致$ b有5。

然而,引用链接可能被$ b =&$ xyz打破; 或未设定($ b); 那时$ a将是唯一知道单元格是在哪里持有5的variables。

还要注意,如果你设置$ a using =&,你必须使用=&next time(或unset($ a))来更改$ a的引用链接,特别是$ a = NULL; 不会中断链接,只用nullreplace5;