我知道在'&'之前加上'&'到您的PHP变量设置对原始变量的引用,而不是像这样复制它的值:
$original = 'apples';
$secondary = &$original;
$original = 'oranges';
echo $secondary; // 'oranges'
如果它以这种方式工作,为什么不使用原始变量?
答案 0 :(得分:2)
在将变量作为参数传递给函数时,通过引用传递是有用且必要的,期望在不在内存中创建副本的情况下修改变量。例如,许多PHP的本机array_*()
函数都在数组引用上运行。
此函数接收数组引用并将元素附加到原始数组上。如果在没有&
引用的情况下完成此操作,则会在函数范围内创建新的数组副本。然后必须将其返回并重新分配以供使用。
function add_to_an_array(&$array)
{
// Append a value to the array
$array[] = 'another value';
}
$array = array('one', 'two', 'three');
add_to_an_array($array);
print_r($array);
Array
(
[0] => one
[1] => two
[2] => three
[3] => another value
)
答案 1 :(得分:1)
$original = 'apples';
function foo($word) {
$word = 'oranges';
}
foo($original);
echo $original; // apples, because only local $word was changed, not $original.
foo(&$original);
echo $original; // oranges, because $original and $word are the same
答案 2 :(得分:1)
通过引用传递真的是一个警察,反对良好的封装。如果需要以这种方式操作变量,它可能应该属于一个类作为成员变量,然后不需要传递给该函数。好的OO设计通常会使用“final”关键字使成员变量不可变,但PHP没有这个。将变量传递给函数可能会改变它的值是不直观的,这就是为什么在大多数情况下应该避免它。
同样采用更完整的OO设计可以防止您拥有长而复杂的方法签名,并且许多可选参数难以重新考虑。
答案 3 :(得分:0)
参考文献有很多用途。
等...
请记住,他们在那里,你肯定会在时机成熟时为他们找到一个应用程序,并且你面临一个可以用引用来解决的问题。
查看以下文章,了解参考文献的其他想法和用法: http://www.elated.com/articles/php-references/
答案 4 :(得分:0)
更有趣的用法是在函数的形式参数中使用它
FOO($ a)的
...
function foo(& $ a){ .... }
这允许你修改函数中的一个。