我一直在谷歌搜索,但我找不到任何东西。
$x->func(&$string, $str1=false, $str2=false);
&
$string
之前&$string
做了什么?
答案 0 :(得分:35)
您正在通过引用分配该数组值。
通过引用(& $)和$传递参数是当你通过引用传递参数时你处理原始变量,意味着如果你在函数内部改变它,它也会在它之外被改变,如果你将参数作为副本传递,函数创建此变量的复制实例,并处理此副本,因此如果您在函数中更改它,它将不会在其外部更改
参考:http://www.php.net/manual/en/language.references.pass.php
答案 1 :(得分:10)
&声明应该将对变量的引用传递给函数而不是它的克隆。
在这种情况下,如果函数更改参数的值,则传入的变量的值也将更改。
但是,对于PHP 5,您应该牢记以下内容:
您可以在此处找到更多信息: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
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
答案 2 :(得分:3)
& - 按参考传递。它通过引用而不是字符串值传递。
答案 3 :(得分:3)
&安培; =通过引用传递:
引用允许两个变量引用相同的内容。换句话说,变量指向其内容(而不是成为该内容)。通过引用传递允许两个变量指向不同名称下的相同内容。 &符号(&)放在要引用的变量之前。
答案 4 :(得分:2)
这意味着您将对字符串的引用传递给方法。对方法中的字符串所做的所有更改也将反映在代码中的该方法之外。
另请参阅:PHP's =& operator
示例:
$string = "test";
$x->func(&$string); // inside: $string = "test2";
echo $string; // test2
没有&运算符,您仍然会在变量中看到“test”。