gpt4 book ai didi

php - 调用返回后,PHP 是否垃圾收集函数范围的对象?

转载 作者:行者123 更新时间:2023-12-01 13:43:22 25 4
gpt4 key购买 nike

我知道一旦脚本结束,all objects are destroyed并返回内存。一旦函数结束并且无论如何都无法访问,这是否也会发生在函数范围的对象上?

例如,我担心 PHPUnit 测试中的内存泄漏,其中我几乎为每个测试创建一个新对象。如果我运行足够多的测试,这最终会溢出我的堆吗?

public function testMyFunction()
{
// Arrange
$myObject = new MyClass();

// Act
$return = $myObject->myFunction();

// Assert
$this->assertEquals(true, $return);

}

我应该手动 unset在“Absterge”部分将它们用于长时间运行的脚本?
public function testMyFunction()
{
// Arrange
$myObject = new MyClass();

// Act
$return = $myObject->myFunction();

// Assert
$this->assertEquals(true, $return);

// Absterge
unset($myObject);
}

最佳答案

一旦对一个对象的所有引用都消失了,PHP 将进行垃圾收集。
unset不需要。但是,您可能有循环依赖,在这种情况下它可能不会被垃圾收集。

使用的唯一理由 unset()是如果您想在函数结束之前释放内存。如果还有其他东西持有对您正在取消设置的东西的引用,则 unset() 只会删除局部变量,而不是对象本身。

有一个特殊的垃圾回收周期可以清理循环引用。你可以用这个 php.ini 设置来控制它:

http://ca2.php.net/manual/en/info.configuration.php#ini.zend.enable-gc

如果您有兴趣测试您的对象何时以及是否被垃圾回收,您可以添加 __destruct方法。

关于php - 调用返回后,PHP 是否垃圾收集函数范围的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37913919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com