免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11791 | 回复: 1
打印 上一主题 下一主题

[原创] 从 PHP 代码分析 PHP 的 GC(垃圾回收) 机制 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-11-07 22:04 |显示全部楼层
楼主精神可嘉
不过这个不能算gc吧 只是关于php引用的一些行为特性
而且全都在手册中有提及到
1.引用是什么?
2.修改引用的值会有什么影响?
3.unset一个引用变量会怎么样?

另外,分享一段代码, 帮助理解引用
  1. <?php
  2. $items = array('apple', 'banana', 'carrot');
  3. print_r($items);
  4. foreach ($items as &$item) { }
  5. print_r($items);
  6. foreach ($items as $item) { }
  7. print_r($items);
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-11-09 21:36 |显示全部楼层

回复 #5 fly020212 的帖子

楼主所说的并不完全正确, $a=$b这样的方式并不意味着一定会开辟新的内存
是否传值拷贝与是否传递引用没有必然关系
参考这里:http://bbs3.chinaunix.net/misc.p ... end&tid=1159154
另外, 你所列的测试代码原因是这样的
PHP5改进了对象赋值操作,但也不是完全如平常所传的在php5中对象是传引用
当$b是一个对象时,$a=$b将会把$b的资源标示符号(也就是var_dump看到的那个#1)传递给$a
这样$a,$b依然是指向同一对象内容,所以修改任何一个另一个也被修改了
对其中一个进行unset或者赋值为null,实际上是将变量所存储的资源标示符(#1)给置为了null
所以这个变量也就理所当然的是null了
至于$a=&$b, 你参考关于引用的行为就可以理解了 这里就不赘述了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP