一般来说,如果PHP对象有递归引用,就会发生内存泄漏。让我们从bug开始。示例代码如下所示:


< PHP
类Foo {
功能__construct(){
这个新的栏位($这个);
}
}

类酒吧{
功能__construct($ Foo){
$;
}
}

($ i = 0;$ i < 100;$ + +){
$ obj =新foo();

unset($ obj);
回声memory_get_usage(), / ;
}
>




当你运行的代码,你会发现内存的使用应该是相同的,但它实际上是增加的,而不完全不起作用。

许多开发都基于框架。应用程序中存在复杂的对象关系。所以这很可能发生。


< PHP
类Foo {
功能__construct(){
这个新的栏位($这个);
}

Function __destruct () {
unset(美元->酒吧);
}
}

类酒吧{
功能__construct($ Foo){
$;
}
}

($ i = 0;$ i < 100;$ + +){
$ obj =新foo();

$ obj -> __destruct();
unset($ obj);
回声memory_get_usage(), / ;
}
>




这是一个有点丑,但它是所有关于过去。幸运的是,这个bug已经被固定在PHP5.3 CVS代码。

在这种情况下,要注意PHP程序的设计,相信对PHP程序设计有一定的参考价值。