115

PHP中的=&(equals-&ersand) 赋值运算符有什么作用?

是否已弃用?

4

5 回答 5

137

它没有被弃用,也不太可能被弃用。例如,这是一种标准方法,可以将一个阵列或对象的一部分更改为另一个阵列或对象,而不是复制现有数据。

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

唯一推荐使用的是PHP 5中的“通过引用=&分配结果” ,这可能是任何混淆的根源。由引用自动分配,因此在 中是多余/不推荐使用的,但在.newnew&$o = &new C;$o = &$c;


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

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

这里有一个方便的链接,指向PHP 手册中的Assign By Reference的详细部分。该页面是参考系列的一部分——值得花一点时间阅读整个系列。

于 2011-11-17T22:11:57.973 回答
26

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

于 2009-11-20T04:32:06.840 回答
8
$x = &$y['z'];

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

这可以防止您可能想要阅读的错误消息。我还没有找到这方面的文档;据我所知,可能是 5.3 中的新功能。

于 2013-09-23T22:31:01.650 回答
3

该符号&在 PHP 中以各种方式用于表示带有“引用”的操作。PHP 手册有一个标题为References Explained的部分,每个 PHP 程序员都应该阅读该部分。

重要的是要理解 PHP 中的引用不是一种数据类型,如指针,而是关于变量如何工作的概念。因此没有单一的含义&——你不应该把它读成“做一个参考”——它只是意味着“这里发生了一些参考”。

特别是语法$a =& $b,也可以写成$a = &$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

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

$a =& $b;
$c =& $b;
$d =& $a;
$e =& $c;
// $a, $b, $c, $d, and $e now all point to the same data, interchangeably

但是,如果您将相同的变量放在左侧,它会破坏该变量的现有链接,并将其链接到其他东西

$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

要在不创建新链接的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
于 2021-04-10T16:50:25.000 回答
1

我想提请注意“Assigning By Reference”的语义和代码样式。OP 的开场白暗示了一个误解:

=&(等号)赋值运算符在 PHP 中的作用是什么?

首先,让我们回顾一下PHP Docs 页面的 Assignment Operators的专用部分。请注意 the=之前是如何出现的,&并且这两个符号是分开的。这是因为它们不是“组合运算符”。从语义上讲,它是“分配”一个“引用”;它不是“引用赋值运算符”。

其次,看看所有“组合运算符”是如何写在文档页面下方的。=始终是最右边的符号。这是一个非常重要的区别,因为写&在左边的=改变了含义——它变成了一个组合运算符(“按位和赋值运算符”)而不是对引用的赋值。

PSR 编码标准应该是所有 PHP 开发人员都知道并努力遵守的东西。请注意PSR-12 第 6.2 节的这条规则:

所有二进制算术、比较、赋值、按位、逻辑、字符串和类型运算符必须前后至少有一个空格

根据这条规则,操作符后面应该总是有一个空格=——这=&违反了。

&此外,还有其他规则规定其变量/参数/函数/等之间不应有空格。

在参数前使用引用运算符 & 时,其后不得有空格


TL;博士

分配引用时,始终=在两边写上空格,并且永远不要在之后写空格&

  • 坏的:$a =& $b;
  • 好的:$a = &$b;

一致/正确地展示:https ://riptutorial.com/php/example/11991/assign-by-reference

没有一致/正确地证明:

于 2020-09-16T07:01:06.313 回答