PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP析构函数以及与C析构函数的关系?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我很难理解在PHP类析构函数中应该做什么

我来自c.
在c中,如果我有这个:

class A{
    int n;
    ~A(){
    }
}

class A2{
    int* n;
    ~A2(){
        delete n;
    }
}

语言知道,如果A的实例超出范围,则应释放其成员n,因为n仅属于该实例.
但是如果A2的实例超出范围,它不知道是否应释放n指向的内存(也许还有其他指向该内存的指针)
但是,如果我们确定如果A2实例超出范围,则要取消分配该内存,则需要手动“删除”它,因为这是我们的意图.

PHP呢?
我是新来者,并且看到了几种@R_419_2495@案:

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注释的重写代码

解决方法:

你用C的析构函数写什么?
您可能编写了释放对象生命周期中获取的资源的语句,不是吗?

这在PHP中是相同的,但是在大多数情况下,您不需要在析构函数中放置任何内容,因为未使用的内存和资源会由解释器自动进行垃圾收集.

但是,建议在析构函数中释放在构造函数获取的资源(或在对象的生存期内),以确保它们使用的内存较早释放或作为文档释放:有人读取析构函数并找到调用它的fclose()知道在构造函数或类的其他方法中,已执行对fopen()的配对调用,并且处理程序存储在对象内部.

附言

> $n行来自:

class A3{
    $n
    public function __deconstruct(){

是不正确的.它应以分号(;)结尾,并且如果要声明属性,则正确的语法应从可见性说明符之一(私有,受保护或公共)开始,如下所示:

class A3 {
    private $n;
    public function __destruct() {

>析构函数方法名称__destruct(),而不是__destructor().
> PHP中没有删除http://php.net/manual/en/function.delete.php.
您的三个选择只是一个:选择#1(unset($this-> pdo);).

PHP中阅读有关classes and objects的更多信息.首先,忘记您对C的大部分了解,因为PHP OOP的工作方式不同,而您对C的了解可能对学习PHP中的OOP有害无益.

大佬总结

以上是大佬教程为你收集整理的PHP析构函数以及与C析构函数的关系?全部内容,希望文章能够帮你解决PHP析构函数以及与C析构函数的关系?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: