我有一个类,其中包含一个从另一个类实例化的简单对象数组。 (这个数组很小 - 只包含1到4个对象。)
在第一个类的__destruct方法中,我想清除这个对象数组的内容(释放内存)。为此,请做:
遍历数组,设置每个index = null,然后最后设置array = null?
只需设置array = null?
答案 0 :(得分:0)
正如@ splash58已经提到的,您可以使用unset删除变量。
unset($array); // can be used on multiple as well: unset($var1, $var2, ...);
取消设置只会破坏变量。
答案 1 :(得分:0)
Re:rjdown链接。谢谢。我以前读过那个问题/答案。
从那篇文章中我得出结论(可能是错误的)unset($ var)和$ var = null之间似乎存在2个(可能的?)差异。
实际释放内存的速度。 ($ var = null似乎更快。)
该方法的处理负荷。 (未设置($ var)似乎表示负载较少。)
由于原因,我决定了内存释放的速度,因此使用了空赋值。
然而,问题仍然存在 - 数组将为null,但数组先前包含的对象是否为非null,因此必须等待GC?
由于测试实际上很容易,我做到了。
我为父类创建了大约1,000个子记录。然后我实例化了一个新的父类,并将1,000个子对象加载到数组中。
我在测试文件中使用了memory_get_usage(),并运行了多个试验:
父母班级' __destruct方法只是取消设置子对象数组。
父母班级' __destruct方法遍历数组,设置每个instance = null,然后取消设置数组。
数据如下:
启动内存 - 620288
父实例和子数组加载后的内存 - 1316952
父级设置为null后的内存 - 620864
mem diff = 576
启动内存 - 620952
父实例和子数组加载后的内存 - 1317616
父级设置为null后的内存 - 621528
mem diff = 576
(我还在父对象创建,子数组加载,父对象破坏之间设置了微时间间隔。对于每个2 __destruct方法的测试在10毫秒左右基本相同。)
从此我得出结论 - 确实没有多大区别。取消或无效,无论你的船是什么漂浮。
(也许我应该在用问题打扰论坛之前简单地运行我自己的测试。)
再次,谢谢。