我有一个PHP脚本在后台运行一段时间(通常是几分钟,但这可能长达一个小时左右)。它包含一个循环,我需要在其中创建一个对象。我现在每次使用相同的名称:
while (!$job_finished) {
$x = new MyClass();
$x->doStuff();
$x->doMoreStuff();
unset ($x);
// more code here
}
由于我使用相同的名称重复创建$ x,垃圾收集会正确清理内存吗?或者我应该使用超过$ x的数组,例如
$x[$i] = new MyClass();
答案 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;总是在循环中覆盖它。