PHP &$string - What does this mean?
本问题已经有最佳答案,请猛点这里访问。
我一直在谷歌搜索,但什么都找不到。
1 | $x->func(&$string, $str1=false, $str2=false); |
在
您正在通过引用分配该数组值。
通过引用(&;$)和$传递参数是指当通过引用传递参数时,您处理原始变量,这意味着如果您在函数内部更改它,它也将在函数外部更改;如果您将参数作为副本传递,函数将创建此变量的副本实例,并处理此副本,因此如果您更改它在函数中,它不会在函数之外被更改
参考: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"。