析构方法|学习笔记

简介: 快速学习析构方法

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段析构方法】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/711/detail/12663


析构方法

 

内容介绍:

一、析构方法

 

一、析构方法

1、目标

了解析构方法的作用,能够实际应用析构方法解决释放资源的问题

2、概念

析构方法: __destruct(),也是一种类结构中魔术方法,与构造方法一样,也是系统规定好,只需要开发人员抄一遍即可,对象在被销毁时会自动调用(触发点不一样,构建对象是在被创建的时候自动调用,构造对象是为了初始化资源)

(1)析构方法是用来对象销毁时主动释放资源的

(2)对象销毁

对象无变量指向(变量指向其他数据)

对象被主动销毁(unset 销毁对象变量)

脚本执行结束(自动释放资源)

(3)PHP 脚本执行结束会释放所有资源,所以一般较少使用析构方法(在高级语言编程析构方法利用比较多,C++ 分配的内存占用的资源如果不能释放,可能资源就一直被占,虽然对象没了但是有可能资源还被占用,而且大型的语言一般情况对象不会很快的消失, PHP 用完马上就消失了,所以比较少用)

3、步骤

(1)定义类结构

(2)确定需要在对象销毁时释放资源

(3)使用析构方法释放资源

4、示例

(1)析构方法实现:类中增加一个 _destruct() 方法

class saler{

# 析构方法

public function _destruct(){

echo ___FUNCTION__;

}

}

(2)析构方法调用:析构方法是在对象被销毁时自动,对象的“垂死挣扎”

# 实例化对象

$s = new saler();

# 对象变量指向其他数据

$s = 1;

# 主动销毁对象变量

unset($s);

# 脚本执行结束自动释放

代码 06destruct.php:

<?Php

#析构方法

class Saler{

#析构方法

public function _destruct(){

echo __FUNCTION_;

}

}

#实例化

$s = new s Saler;

会被调用,因为对象创建脚本执行完后要销毁

结果:_destruct

说明方法被执行

主动销毁:

<?Php

#析构方法

class Saler{

#析构方法

public function _destruct(){

echo __FUNCTION_;

}

}

#实例化

$s = new s Saler;

#主动销毁

$s = 1;

echo 'end';

结果:_destructend

#主动销毁

# $s = 1;

unset($s);

echo 'end';

结果一样

析构方法里面正常要释放资源,一般不用,用户看到结果时已经执行完了,脚本运行结束会自动回收

(3)析构方法也是普通方法,可以由对象直接调用

# 接析构方法实现代码

$s=new saler();

$s->__destruct(); # 思考:此时对象是否被销毁?

没有意义

<?Php

#析构方法

class Saler{

#析构方法

public function _destruct(){

# 释放资源

echo _FUNCTION_;

}

}

# 实例化

$s = new Saler;

#主动销毁

# $s = 1;

# unset($s);

#

#主动调用析构方法

$s-> destruct();

echo 'end';

结果:__destructend__destruct

end 之前有一次主动调用,end 之后有一次被动调用

调用方法不会代表对象被销毁,调用对象方法对象依然还是对象,没有消失,只是掉用方法,调用肯定会执行,如果脚本执行之后还执行一次说明那才是释放类型

5、小结

(1)析构方法是一种对象销毁时自动调用的方法

(2)析构方法是用来对象销毁自身所占用的资源(PHP 中用的不多,如果有大型的确定对象运行完之后,后面还有很长时间对象不会销毁,而且对象占用的资源比较多,也要使用析构方法来做)

(3)PHP 中脚本执行结束,系统会自动回收所有资源,因此一般PHP 中很少使用析构方法

相关文章
|
移动开发 Java 开发者
hbuilderx打包苹果证书获取步骤
目前app开发,很多企业都用H5框架来开发,而uniapp又是这些h5框架里面最成熟的,因此hbuilderx就成为了开发者的首选。然而,打包APP是需要证书的,那么这个证书又是如何获得呢? 生成苹果证书相对复杂一些,所以这里我重点说下ios证书的生成流程
726 0
|
存储 运维 安全
阿里云发布SaaS数据本地化服务,助力企业跨国扩展与合规
阿里云SaaS数据本地化服务(Alibaba Cloud InCountry Service,简称ACIS) 由阿里云和 InCountry合作推出,为使用海外SaaS或者应用的企业客户提供了一种将受管制数据在境内存储和处理,以实现合规的SaaS服务。
2091 0
阿里云发布SaaS数据本地化服务,助力企业跨国扩展与合规
|
机器学习/深度学习 缓存 移动开发
深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解
深度学习进阶篇-预训练模型[2]:Transformer-XL、Longformer、GPT原理、模型结构、应用场景、改进技巧等详细讲解
|
SQL XML 设计模式
Mybatis拦截器执行过程解析
Mybatis拦截器执行过程解析
Mybatis拦截器执行过程解析
|
存储 安全 Cloud Native
如何在银行核心系统中安全地搭建微服务架构?
微服务作为现代互联网应用的主流架构风格,已在很多行业应用中获得广泛的成功,而银行核心系统由于其复杂性和风险敏感性,主流架构依然在从单体式 SOA 到真正的微服务分布式架构的转型期。
780 1
|
存储 关系型数据库 MySQL
【mysql】文本字符串类型
【mysql】文本字符串类型
5133 1
【mysql】文本字符串类型
|
测试技术 持续交付 定位技术
如何构建基于 DDD 领域驱动的微服务?(1)
如何构建基于 DDD 领域驱动的微服务?
427 0
如何构建基于 DDD 领域驱动的微服务?(1)
|
存储 SQL 机器学习/深度学习
可观测平台下告警降噪实践——GOPS分享
本文介绍阿里云SLS丁来强(花名成喆)在GOPS2021上海站分享时的议题内容,结尾有PPT下载链接。
2386 0
可观测平台下告警降噪实践——GOPS分享