PHP变量的深入理解和地址传递

小白菜白呦白 2010-09-24 11:20:45
$data='2010';
$data1=$data;
$data=NULL;
echo $data.'-'.$data1;

输出 -2010

$data='2010';
$data1=&$data;
$data=NULL;
echo $data.'-'.$data1;
输出 -

$data='2010';
$data1=$data;
unset($data);
echo $data.'-'.$data1;

输出 -2010

$data='2010';
$data1=&$data;
unset($data);
echo $data.'-'.$data1;
输出 -2010


谁能给详细解释一下 2个问题
第一个 unset和 变量=NULL的区别
第二个 地址传递 和 普通赋值 的区别
他们占用内存的区别 和 如何释放内存的 哪位高手理解的透彻好好讲讲
...全文
87 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maquan 2010-09-24
  • 打赏
  • 举报
回复
你所说的“地址传递”,在 PHP 的手册里叫做“Assign By Reference”,相当于创建了一个变量别名,用两个变量访问“同一个值”。比如 $a=&$b 之后,$a 就成了 $b 的“别名”,所有可以使用 $b 的地方,都可以使用 $a,只有一个例外,就是 unset()。

对于一个普通变量,unset($b) 跟 $b=NULL 的效果是一样的,也就是把变量置为“未赋值”状态。

而对于“引用变量”,就是上面说的“别名”,unset($a) 是切断引用关系,$a 成为一个“未赋值的普通变量”, $b 则保持原值;而 $a=NULL 则是把值置为 NULL,相当于 $a 和 $b 都成为“未赋值的变量”,而 $a 与 $b 的别名关系依然保持。

■□■□■□■□■□■□■□■
□             □
■  忍以明志 勤以致远  ■
□             □
■□■□■□■□■□■□■□■
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
CunningBoy 2010-09-24
  • 打赏
  • 举报
回复
1) unset是销毁变量,就说这个变量不存在了。变量=NULL只是一个赋值操作,变量仍然存在。
2) 第二个问题是基本概念了,学过C/C++的都应该知道这两者的区别。

PHP中很少考虑内存释放,因为当PHP脚本执行结束之后,PHP解释器会自动释放内存。
jcy787211820 2010-09-24
  • 打赏
  • 举报
回复
1) unset是销毁变量,就说这个变量不存在了。变量=NULL只是一个赋值操作,变量仍然存在。
2) ($data1=&$data)&符号,我理解为是引用那个变量,除非被引用的变量被销毁(unset)不存在了,否则$data1在任何地方都等于data。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧