PHP中的=&
(equals-&ersand) 赋值运算符有什么作用?
是否已弃用?
它没有被弃用,也不太可能被弃用。例如,这是一种标准方法,可以将一个阵列或对象的一部分更改为另一个阵列或对象,而不是复制现有数据。
它被称为引用赋值,引用手册,“意味着两个变量最终都指向相同的数据,并且没有任何内容被复制到任何地方”。
唯一不推荐使用的是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 手册中的Assign By Reference的详细部分。该页面是参考系列的一部分——值得花一点时间阅读整个系列。
这是两个不同的运营商。=
是你可能知道的任务。并且&
意味着变量应该通过引用而不是值来访问。
$x = &$y['z'];
$y['z']
如果它不存在也有创建的效果,并将其设置为null
.
这可以防止您可能想要阅读的错误消息。我还没有找到这方面的文档;据我所知,可能是 5.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
我想提请注意“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
没有一致/正确地证明: