我很难理解PHP类析构函数应该做什么。
我来自C++。 在C++中,如果我有以下代码:
class A{
int n;
~A(){
}
}
class A2{
int* n;
~A2(){
delete n;
}
}
该语言知道如果一个A实例超出范围,它的成员n应该被释放,因为n仅属于该实例。 但是,如果A2实例超出范围,则不知道是否应该释放n指向的内存(可能有其他指针指向相同的内存) 但是,如果我们确定希望在A2实例超出范围时释放该内存,我们需要手动“删除”它,因为这是我们的意图。
那么PHP呢? 我是新手,看到了几种解决方案:
class A3{
private $n;
public function __destruct(){
//Choice 1
unset($this->$n);
//Choice 2
delete $this->$n;
//Choice 3
}
}
我不确定unset和delete之间的区别,但无论如何,(参考选择3)我被告知如果我们什么都不做,PHP会自行回收内存。但我不理解在析构函数中使用delete或unset的作用。在PHP中,我们没有“指针”的概念,因此,如果A3的实例超出范围,释放n是很自然的。
那么,在析构函数中是否有任何应该处理的内容呢?如果没有,那么在析构函数中永远不需要使用delete或unset吗?
编辑:基于axiac的评论重写了代码。
delete
不是有效的 PHP,所以我不确定你在哪里看到了它。 - iainn