php 引用返回(&)详解

引用是什么
在 PHP 中引用意味着用不同的名字访问同一个变量内容。这并不像 C 的指针,它们是符号表别名。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。

最接近的比喻是:Unix 的文件名和文件本身,即:变量名是目录条目,而变量内容则是文件本身。

引用可以被看作是 Unix 文件系统中的紧密连接 或 WINOWS中的快捷方式。

引用做什么
PHP 的引用允许你用两个变量来指向同一个内容。意思是,当你这样做时:

$a =& $b
?>

这意味着 $a 和 $b 指向了同一个变量(即内存中的同一块内存地址)。
注:  $a 和 $b 在这里完全相同,这并不是说 $a  指向了$b 或者相反,而是 $a 和 $b 指向了同一个地方。

同样的语法也可以用在函数中,它返回引用,以及用在 new 运算符中(PHP 4.0.4 以及以后版本):

$bar =& new fooclass();
$foo =& find_var ($bar);
?>

注: 不用 & 运算符将导致对象生成一个拷贝。如果你在类中用 $this,它将永远作用于该类当前的实例。没有用 & 的赋值将拷贝这个实例(例如对象)并且 $this 将作用于这个拷贝上,这并不总是想要的结果。由于性能和内存消耗的问题,通常你只想工作在一个实例上面。

尽管你可以用 @ 运算符来关闭构造函数中的任何错误信息,例如用 @new,但用 &new 语句时这不起效果。这是 Zend 引擎的一个限制并且会导致一个解析错误。

引用做的第二件事是用引用传递变量。 这是通过在函数内建立一个本地变量并且该变量在呼叫范围内引用了同一个内容来实现的。例如:


function foo (&$var)
{
$var++;
}

$a=5;
foo ($a);
?>


将使 $a 变成 6。这是因为在 foo 函数中变量 $var 指向了和 $a 指向的同一个内容。更多详细解释见引用传递。

引用做的第三件事是引用返回。

引用不是什么
如前所述,引用不是指针。这意味着下面的结构不会产生你预期的效果:
function foo (&$var)
{
$var =& $GLOBALS["baz"];
}
foo($bar);
 

阅读全文>>

你可能感兴趣的:(php 引用返回(&)详解)