PHP's =& operator
这两个PHP语句都在做同样的事情吗?:
1 2 3
| $o =& $thing;
$o = &$thing; |
是的,它们完全一样。它们只获取对象的引用,并在变量$o中引用它。请注意,thing应该是变量。
- 是的,对不起,我是说$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; |
- 我希望找到一些文档来证实这一点,但是php.net并不十分清楚。参考文献中提到的=&,但奇怪的是,=&在赋值操作符中实际上并不适用(它总是$x = &$y;)。空白是真的有意义还是完全相同?你能提供一些参考资料吗?
- 如果PHP人员需要,他们可以修改PHP解析器以允许上面的第二个错误示例,但看起来=&;组合是由预处理器解释的,而不是在运行时解释的。如果您浏览了PHP编译器/解释器的源代码,就可以确认这一点。
他们都给出了一个预期的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
- 是的,对不起,我是说$thing。
- 此答案已过时,它是对以前版本的错误的答案。请删除此答案。
是的,他们有。在这两种情况下,$o将成为对thing的引用(我假设thing不是一个常数,但实际上是一个有意义的变量)。
- 你不能引用那样的函数,也不能引用常量。
- 卡尔,我假设这不是一个常数,因为引用常数是毫无意义的。不过,您对函数的理解是正确的。
- 是的,对不起,我是说$thing。
- 此答案已过时,它是对以前版本的错误的答案。请删除此答案。