PHP对象递归引用造成内存泄漏分析,php递归_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP对象递归引用造成内存泄漏分析,php递归_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1927字,纯文字阅读大概需要3分钟。
内容图文
PHP对象递归引用造成内存泄漏分析,php递归
通常来说,如果PHP对象存在递归引用,就会出现内存泄漏。这个Bug在PHP里已经存在很久很久了,先让我们来重现这个Bug,示例代码如下:
<?php class Foo { function __construct() { $this->bar = new Bar($this); } } class Bar { function __construct($foo) { $this->foo = $foo; } } for ($i = 0; $i < 100; $i++) { $obj = new Foo(); unset($obj); echo memory_get_usage(), "/n"; } ?>
运行以上代码,你会发现,内存使用量本应该不变才对,可实际上却是不断增加,unset没有完全生效。
现在的开发很多都是基于框架进行的,应用里存在复杂的对象关系,那么就很可能会遇到这样的问题,下面看看有什么权宜之计:
<?php class Foo { function __construct() { $this->bar = new Bar($this); } function __destruct() { unset($this->bar); } } class Bar { function __construct($foo) { $this->foo = $foo; } } for ($i = 0; $i < 100; $i++) { $obj = new Foo(); $obj->__destruct(); unset($obj); echo memory_get_usage(), "/n"; } ?>
办法有些丑陋,不过总算是对付过去了。幸运的是这个Bug在PHP5.3的CVS代码中已经被修复了。
对此,在进行PHP程序设计时有必要加以注意!相信本文所述对大家的PHP程序设计有一定的参考价值。
函数demo有两个必然的输出语句,一个是开始的一个,一个是最后的一个!
函数运行流程
1.输出num
2.判断num大于0否从而确定是否调用函数
3.输出num
在num大于0时,每一次调用函数,都只执行到第2步,后等待第二步调用自身返回结果后继续执行,因此,每次调用自身结束返回后都重新输出一次num,也就是倒序输出了后面的数值!
那好吧 随便啰嗦几句
写sql语句的时候 最好把mysql函数都大写 这样的话sql语句就一目了然 很好看的说。
比如:$sql = "SELECT * FROM `user` WHERE `id` = '$id'";
并且 表名 字段名都使用 ` 1旁边的点(英文输入法下的点)包含起来 并且给字段复制的变量 无论是字符串还是数字类型 都用' 单引号包含起来
可是很有好处的哦。。。。。
http://www.bkjia.com/PHPjc/871099.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/871099.htmlTechArticlePHP对象递归引用造成内存泄漏分析,php递归 通常来说,如果PHP对象存在递归引用,就会出现内存泄漏。这个Bug在PHP里已经存在很久很久了,...
内容总结
以上是互联网集市为您收集整理的PHP对象递归引用造成内存泄漏分析,php递归_PHP教程全部内容,希望文章能够帮你解决PHP对象递归引用造成内存泄漏分析,php递归_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。