PHP的=&运算符

PHP's =& operator

这两个PHP语句都在做同样的事情吗?:

1
2
3
$o =& $thing;

$o = &$thing;

是的,它们完全一样。它们只获取对象的引用,并在变量$o中引用它。请注意,thing应该是变量。


从句法上讲,它们是不同的。操作符是原子的,这很重要。例如,不能在三元表达式中使用=&;运算符。以下两个都不是有效的语法:

1
2
$f = isset($field[0]) ? &$field[0] : &$field;
$f =& isset($field[0]) ? $field[0] : $field;

因此,您可以使用以下方法:

1
isset($field[0]) ? $f =& $field[0] : $f =& $field;


他们都给出了一个预期的T amayim_nekudotayim错误。

如果你指的是$o = &$thing;,那么它将事物的引用赋给o。下面是一个例子:

1
2
3
4
5
6
7
8
9
$thing ="foo";

$o = &$thing;

echo $o; // echos foo

$thing ="bar";

echo $o; // echos bar


区别非常重要:

1
2
3
4
5
6
7
8
9
<?php
$a ="exists";
$b = $a;
$c =& $a;
echo"a=".$a.", b=".$b.", c=".$c."<br/>"; //a=exists b=exists c=exists

$a = null;
echo"a=".$a.", b=".$b.", c=".$c; //a= b=exists c=
?>

变量$C在$A变为空时死亡,但变量$B保持其值。


如果您的意思是thing前面有一个$,那么是的,两者都是通过引用分配的。您可以在这里了解有关PHP中引用的更多信息:http://www.php.net/manual/en/language.references.whatdo.php


是的,他们有。在这两种情况下,$o将成为对thing的引用(我假设thing不是一个常数,但实际上是一个有意义的变量)。