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

Kyl*_*Dye 93 php operators assignment-operator

什么是=&(等于-号)赋值运算符在PHP中呢?

它被弃用了吗?

use*_*ca8 111

它并没有被弃用,也不太可能.例如,这是将一个数组或对象镜像的一部分更改为另一个,而不是复制现有数据的标准方法.

它被称为引用分配,引用手册,"意味着两个变量最终指向相同的数据,没有任何东西被复制到任何地方".

该唯一弃用与=&被"分配的结果new在通过引用" PHP 5,这可能是任何混淆的来源.new是通过引用自动分配的,因此&是多余的/弃用的$o = &new C;,但不是$o = &$c;.


由于难以搜索,请注意=&(等于&符号)与= &(等于空格符号)相同,并且经常被编写为使其运行到另一个变量中,$x = &$y['z'];或者$x = &$someVar(和号美元符号变量名称).从文档中简化的示例:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4
Run Code Online (Sandbox Code Playgroud)

这是一个方便的链接,指向PHP手册中有关" 按引用分配"详细部分.该页面是参考系列的一部分 - 值得花一点时间阅读整个系列.

  • 阅读整个系列需要花费一分钟多的时间 (15认同)
  • 旁注:*"因为很难搜索"*:http://symbolhound.com是你这样的朋友的朋友. (6认同)

Asa*_*aph 25

这是两个不同的运营商.=是你可能知道的任务.并且&意味着变量应该通过引用而不是值来访问.

  • 对不起,这太简单了.$ a =&$ b意味着使变量$ a引用与$ b现在相同的事物.在此之后,$ a = 5; 也会导致$ b有一个5.但是参考链接可能被$ b =&$ xyz打破; 或未设置($ b); 那时$ a将是唯一知道单元格在哪里的变量.还要注意,如果你设置$ a using =&,你必须使用=&next time(或unset($ a))来改变$ a的引用链接,特别是$ a = NULL; 不会破坏链接,它只用null替换5; (59认同)
  • @Don:谢谢你的详细说明.我可以告诉你,你是一名C程序员. (8认同)
  • 唐我说的第二个.但我不会说这太简单了.我说这是错的. (7认同)

IMS*_*SoP 7

该符号&在 PHP 中以多种方式使用来表示带有“引用”的操作。PHP 手册中有一个标题为“参考资料解释”的部分,每个 PHP 程序员都应该阅读。

重要的是要理解 PHP 中的引用不是一种数据类型(如指针),而是关于变量如何工作的概念。因此,它没有单一的含义&- 你不应该将其读作“进行引用” - 它只是意味着“这里发生了一些引用-y”。

特别是,该语法$a =& $b也可以写成$a = &$b表示按引用赋值。它将两个变量绑定在一起,以便它们都指向同一条数据。将 视为&修改=而不是修改$b

一旦您以这种方式将两个变量绑定在一起,它们就可以互换 - 您不能说“$a 指向 $b”或“$b 指向 $a”:

$a =& $b;
$a = 42;
// both $a and $b will be 42
$b = 101;
// both $a and $b will be 101
Run Code Online (Sandbox Code Playgroud)

您还可以将两个以上的变量链接在一起作为引用,并且在赋值的右侧使用哪个现有名称并不重要:

$a =& $b;
$c =& $b;
$d =& $a;
$e =& $c;
// $a, $b, $c, $d, and $e now all point to the same data, interchangeably
Run Code Online (Sandbox Code Playgroud)

但是,如果将相同的变量放在左侧则会破坏该变量的现有链接,并将其链接到其他内容

$a =& $b;
// $a and $b are linked together

$a =& $c;
// $a is now linked to $c
// the value of $b doesn't change, but it is not linked to $a or $c
Run Code Online (Sandbox Code Playgroud)

“破坏”链接而不创建新链接,您可以使用关键字unset

$a =& $b;
$c =& $a;
// $a, $b, and $c are all linked together
unset($a);
// $b and $c are still linked together, but $a is independent
Run Code Online (Sandbox Code Playgroud)

一些描述称为=&“创建或添加到参考集”。如果将其作为函数实现,可能会更好,比如bind($a, $b)强调两个参数都受到操作的影响。


小智 5

$x = &$y['z'];
Run Code Online (Sandbox Code Playgroud)

$y['z']如果不存在则创建效果,并将其设置为null.

这可以防止您可能想要阅读的错误消息.我还没有找到关于此的文件; 据我所知,在5.3中可能是新的.