PHP &$string - 这是什么意思?

45

我一直在谷歌搜索,但是找不到任何有用的信息。

$x->func(&$string, $str1=false, $str2=false);

那个在 $string 前面的 & 是做什么用的呢?&$string


7
将此标记为重复的人:目前这是错误的……这个问题不是重复的,因为符号"&$"的组合没有在所谓的参考问题中显示。请在标记问题为重复时更加仔细和考虑周到。 - mike rodent
Mike是正确的。它还没有被回答,至少不在指定的页面中。 这种回复是不负责任的。他们应该被禁止,发表这些回复的人应该被降级。 - Apostolos
5个回答

59

你正在通过引用分配该数组值。

通过引用(&$)传递参数和通过$传递参数不同之处在于,当您通过引用传递参数时,您可以操作原始变量,这意味着如果您在函数内部更改它,则它也会在外部更改,如果您将参数作为副本传递,则函数创建此变量的副本实例,并对其进行操作,因此如果您在函数中更改它,它不会在外部更改。

参考: http://www.php.net/manual/en/language.references.pass.php


简单解释,谢谢 - Mickey
您的文档链接与相关但不同的主题相关。 - Rob Baillie
@Rob Baillie,谢谢,我已经更新了链接。 - Krish R

16

&表示将变量的引用传递给函数,而不是传递它的副本。

在这种情况下,如果函数更改参数的值,则传递的变量值也会发生更改。

但是请注意PHP 5中以下内容:

  • 自 PHP 5.3 起,已弃用调用时引用(如示例所示)。
  • 尽管所有对象现在都通过引用传递,但在函数签名中指定按引用传递仍未被弃用。

您可以在此处找到更多信息:http://www.php.net/manual/en/language.references.pass.php

还有很多信息可以在此处找到: Reference — What does this symbol mean in PHP?

以下是字符串行为的示例:

function changeString( &$sTest1, $sTest2, $sTest3 ) {
    $sTest1 = 'changed';
    $sTest2 = 'changed';
    $sTest3 = 'changed';
}

$sOuterTest1 = 'original';
$sOuterTest2 = 'original';
$sOuterTest3 = 'original';

changeString( $sOuterTest1, $sOuterTest2, &$sOuterTest3 );

echo( "sOuterTest1 is $sOuterTest1\r\n" );
echo( "sOuterTest2 is $sOuterTest2\r\n" );
echo( "sOuterTest3 is $sOuterTest3\r\n" );

输出:

C:\test>php test.php

sOuterTest1 is changed
sOuterTest2 is original
sOuterTest3 is changed

5

&表示通过引用传递:

引用允许两个变量引用相同的内容。换句话说,一个变量指向其内容(而不是成为该内容)。通过引用传递允许两个变量在不同的名称下指向相同的内容。在要引用的变量前放置“&”符号。


3
这意味着您将一个字符串的引用传递到方法中。在该方法内对字符串所做的所有更改也将反映在您的代码中该方法之外的地方。
另请参阅:PHP 的 =& 运算符 示例:
$string = "test";
$x->func(&$string); // inside: $string = "test2";
echo $string; // test2

没有使用 & 运算符,你仍能在变量中看到 "test"。

有趣的是你提到了"=&",我今晚刚学会了它的用法。我已经编程多年了,以前从未使用过。 - Mickey
我也多年编写 PHP 代码,但很少使用它。大多数情况下,您正在传递对象,而不需要这样做。 - eX0du5

3

& - 通过引用传递。它是按引用而不是字符串值进行传递的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接