什么和&在& $数据吗?

时间:2009-12-08 11:21:43

标签: php

PHP中快速入门的问题。

什么& in& $ data和$ data有什么不同?

function prepareMenu(&$data) {
 $this->db->where('parentid',0)
...
...

4 个答案:

答案 0 :(得分:4)

&$data通过引用传递,$data按值传递

通过引用传递 - 您正在传递对象的引用,而不是复制。您在调用者中使用相同的对象。

按值传递 - 您复制对象并将其传递给函数。您正在使用该对象的副本,该副本与调用者中的对象不同。

答案 1 :(得分:2)

如果您运行以下程序,那么结果如下:

$data = 3;
print($data);
prepareMenu($data);
print($data);

function prepareMenu(&$data) 
{
  $data = 7;
  print($data);
}

你会得到输出:

3
7
7

然而,如果您通过值传递,而不是通过引用:

$data = 3;
print($data);
prepareMenu($data);
print($data);

function prepareMenu($data) 
{
  $data = 7;
  print($data);
}

你会得到输出:

3
7
3

与第二个示例一样,$ data中的值将被复制以在prepareMenu中使用,而不是第一个您始终使用原始$ data

的示例。

注意:多年没有编写PHP,所以不要指望实际编译,这仅仅是一个例子=)

答案 2 :(得分:1)

& in& $ data将其标记为参考 http://docs.php.net/references解释了它们如何在php中工作。

答案 3 :(得分:1)

用最简单的术语我可以鼓起勇气:

&安培; - 通过参考传递

通过引用传递变量意味着您正在传递变量用于存储其数据的内存地址的副本。 PHP在其网站上有一整段专门用于解释这个题为"References Explained"的内容。

这只是意味着您可以从辅助来源修改原始变量。

实施例

function testFunction(&$param) {
    $param = 'test2';
}

$var = 'test';
echo $var; // outputs 'test'
testFunction($var);
echo $var; // outputs 'test2'