将&符号添加到PHP变量的实际用法

时间:2011-05-24 16:28:32

标签: php variables

我知道在'&'之前加上'&'到您的PHP变量设置对原始变量的引用,而不是像这样复制它的值:

$original = 'apples';
$secondary = &$original;
$original = 'oranges';

echo $secondary; // 'oranges'

如果它以这种方式工作,为什么不使用原始变量?

5 个答案:

答案 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){ .... }

这允许你修改函数中的一个。