php 引用返回(&)详解

本文深入探讨了PHP中的引用概念,解释了引用如何允许两个变量指向同一内存位置,以及如何使用引用进行变量传递和返回。此外,还对比了PHP引用与C语言指针的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引用是什么
在 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);
 

阅读全文>>

转载于:https://my.oschina.net/lgc/blog/5354

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值