关于操作符:php变量前&$符号这意味着什么?

PHP &$string - What does this mean?

本问题已经有最佳答案,请猛点这里访问。

我一直在谷歌搜索,但什么都找不到。

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

$string&$string之前,&是做什么的?


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

通过引用(&;$)和$传递参数是指当通过引用传递参数时,您处理原始变量,这意味着如果您在函数内部更改它,它也将在函数外部更改;如果您将参数作为副本传递,函数将创建此变量的副本实例,并处理此副本,因此如果您更改它在函数中,它不会在函数之外被更改

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


&;声明应将对变量的引用传递给函数,而不是它的克隆。

在这种情况下,如果函数改变了参数的值,那么传入的变量的值也会改变。

但是,对于php 5,您应该记住以下几点:

  • 从5.3起,调用时间引用(如示例中所示)已被弃用。
  • 当在函数签名上指定时,不推荐使用按引用传递,但对象不再需要按引用传递,因为现在所有对象都是按引用传递的。

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

这里有很多信息:引用-这个符号在PHP中是什么意思?

字符串行为示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

"
);
echo("sOuterTest2 is $sOuterTest2

"
);
echo("sOuterTest3 is $sOuterTest3

"
);

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\test>php test.php
PHP Deprecated:  Call-time pass-by-reference has been deprecated; If you would l
ike to pass it by reference, modify the declaration of changeString().  If you w
ould like to enable call-time pass-by-reference, you can set allow_call_time_pas
s_reference to true in your INI file in C:\test\test.php on line 13

Deprecated: Call-time pass-by-reference has been deprecated; If you would like t
o pass it by reference, modify the declaration of changeString().  If you would
like to enable call-time pass-by-reference, you can set allow_call_time_pass_ref
erence to true in your INI file in C:\test\test.php on line 13

sOuterTest1 is changed
sOuterTest2 is original
sOuterTest3 is changed


&;=通过引用传递:

引用允许两个变量引用同一内容。换句话说,变量指向它的内容(而不是成为内容)。通过引用传递允许两个变量以不同的名称指向相同的内容。与号(&;)放在要引用的变量之前。


&;–通过引用。它是通过引用而不是字符串值传递的。


这意味着您将对字符串的引用传递到方法中。对方法中的字符串所做的所有更改也将反映在代码中该方法之外。

另请参见:php的=&;operator

例子:

1
2
3
$string ="test";
$x->func(&$string); // inside: $string ="test2";
echo $string; // test2

如果没有&;运算符,您仍然可以在变量中看到"test"。