这两个PHP语句是否在执行相同的操作?
$o =& $thing;
$o = &$thing;
是的,它们两者是完全相同的事情。 它们只是引用对象的引用,并将其引用到变量$o
中。 请注意,thing
应该是变量。
从语法角度来看,它们不是同一件事。运算符=&是原子操作,这实际上很重要。例如,在三元表达式中无法使用=& 运算符。以下两种语法都无效:
$f = isset($field[0]) ? &$field[0] : &$field;
$f =& isset($field[0]) ? $field[0] : $field;
那么你应该使用这个:
isset($field[0]) ? $f =& $field[0] : $f =& $field;
=&
,但是奇怪的是,在assignment operators中并没有实际出现=&
(它总是$x = &$y;
)。空格真的很重要吗?还是它们是相同的?你能提供一些参考资料吗? - Jon Surrell他们两个都会产生预期的T_PAAMAYIM_NEKUDOTAYIM错误。
如果你的意思是$o = &$thing;
,那么它会将thing的引用分配给o。这里有一个例子:
$thing = "foo";
$o = &$thing;
echo $o; // echos foo
$thing = "bar";
echo $o; // echos bar
$thing
。 - Kev差别非常重要:
<?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=
?>
当$a变为NULL时,变量$c会被销毁,但变量$b会保留其值。
是的,它们会。在这两种情况下,$o
都将成为对 thing
的引用(我假设 thing
不是一个常量,而是实际上作为变量有意义)。
$thing
。 - Kev如果你在 thing
前面加上 $
,那么是的,两者都是通过引用赋值。你可以在这里了解更多关于 PHP 引用的知识:http://www.php.net/manual/zh/language.references.whatdo.php
$thing
。 - Kev
$thing
。 - Kev