析构方法|学习笔记

简介: 快速学习析构方法

开发者学堂课程【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 中很少使用析构方法

相关文章
|
11月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
17624 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
11月前
|
SQL 数据库管理 索引
SQL语句查询教师表:高效构建与技巧分享
在数据库管理中,查询操作是最基础也是最重要的功能之一
|
存储 文件存储 数据安全/隐私保护
seafile搭建个人存储网盘
几种开源的网盘存储解决方案
1073 0
|
4天前
|
人工智能 运维 安全
|
2天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
814 109
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
410 9