这个PHP脚本会泄漏内存吗?

时间:2015-05-01 11:16:32

标签: php memory-management garbage-collection

我有一个PHP脚本在后台运行一段时间(通常是几分钟,但这可能长达一个小时左右)。它包含一个循环,我需要在其中创建一个对象。我现在每次使用相同的名称:

while (!$job_finished) {
    $x = new MyClass();
    $x->doStuff();
    $x->doMoreStuff();
    unset ($x);

    // more code here
}

由于我使用相同的名称重复创建$ x,垃圾收集会正确清理内存吗?或者我应该使用超过$ x的数组,例如

   $x[$i] = new MyClass();

2 个答案:

答案 0 :(得分:0)

实际上我不需要使用阵列。 unset()命令会破坏对象,因此我不应该担心。这是在PHP documentation所在的地方:

  

只要没有对特定对象的其他引用,或者在关闭序列期间以任何顺序,就会调用析构函数方法。

我使用以下代码对其进行了测试,它显示了在脚本结束之前调用的destruct方法。

<?php

class A {
  function __destruct() {
    echo "cYa later!!\n";
  }
}

$a = new A();
unset($a);

echo "hello";
sleep(10);

答案 1 :(得分:-1)

是的,如果要保持对数组的对象引用,它将不会释放内存和放大器。最后会失败。

但是,您显示的代码示例不会发出内存问题,因为您没有保留对象的参考&amp;总是在循环中覆盖它。