当前位置: 首页 > news >正文

PHP8中的构造方法和析构方法-PHP8知识详解

今日分享的内容是php8中的构造方法和析构方法,我们把构造方法和析构方法这两个方法分开来讲:

Image

1、构造方法

构造方法存在于每个声明的类中,主要作用是执行一些初始化任务。如果类中没有直接声明构造方法,那么类会默认地生成一个没有参数且内存为空的构造方法。

在PHP8中,构造方法的方法名称必须是两个下划线开头的,即“__construct”。具体的语法格式如下:

function__construct([mixed args]){
//方法的内容
}

一个类只能声明一个构造方法。构造方法中的参数是可选的,如果没有传入参数,那么将使用默认参数对成员变量进行初始化。

定义一个构造方法,参考代码:

<?phpclass Fruit {public $name;            //定义成员变量public $num;             //定义成员变量public function __construct($name, $num) { //定义构造方法$this->name=$name;                     //调用本类的成员变量$this->num=$num;                    //调用本类的成员变量}public function showFruit(){             //定义成员方法if($this->num>300){return $this->name."的库存充足,不需要进货!";}else{return $this->name. "的库存数量不多了,需要尽快进货!";}}}$f1=new Fruit ("橘子",600);                 //类的实例化并传递参数echo $f1->showFruit ();                    //调用方法echo "<br />";  $f2=new Fruit ("柚子",100);               //类的实例化并传递参数echo $f2->showFruit ();                   //调用方法
?>

以上代码在PHP8中的显示结果如下:

橘子的库存充足,不需要进货!
柚子的库存数量不多了,需要尽快进货!

由此可见,构造方法__construct()在实例化时会自动执行,通常对一些属性进行初始化,也就是对一些属性进行初始化的赋值。

要特别注意的是,构造方法不能有返回值(return)。

2、析构方法

析构方法的作用和构造方法正好相反。它是在对象被销毁的时候被调用执行的。但是因为PHP求的终有资源释放,所以析构方法的意义是有限的。具体使用的语法格式如下:

function __destruct(){
//方法的内容,通常是完成一些对象销毁前的清理任务
}

PHP 8具有垃圾回收机制,可以自动清除不再使用的对象,从而释放更多的内存。析构方法是在垃圾回收程序执行前被调用的方法,是 PHP 8编程中的可选内容。

不过,析构方法在某些特定行为中还是有用的,比如在对象被销毁时清空资源或者记录日志信息。

以下两种情况中,析构方法可能被调用执行。

(1)、代码运行时,当所有的对于某个对象的reference(引用)被毁掉的情况下。

(2)、当代码执行到最终,并且 PHP8 停止请求的时候。

定义析构方法参考代码:

<?phpclass Fruit {public $name;                               //定义成员变量public $num;                                //定义成员变量public function __construct($name,$num){   //定义构造方法$this->name=$name;                     //调用本类的成员变量$this->num=$num;                    //调用本类的成员变量}public function showFruit (){         //定义成员方法if($this->num>600){return $this->name."的库存充足,不需要进货!";}else{return $this->name."的库存数量不多了,需要尽快进货!";}}public function __destruct(){            //定义析构方法echo "析构函数被调用了,对象Fruit被销毁了!<br />";}}$f1=new Fruit("梨",800);                    //类的实例化并传递参数$f2=new Fruit("葡萄",100);                  //类的实例化并传递参数
?>

以上代码在PHP8中的运行结果如下:

析构函数被调用了,对象Fruit被销毁了!
析构函数被调用了,对象Fruit被销毁了!

PHP8使用的是一种“社圾回收”机制,能够自动清除不再使用的对象并释放内存,也就是说即使不使用unset()函数,析构方法也会被自动调用,这里只是明确一下析构方法在何时被调用。在一般情况下是不需要手动创建析构方法的。

到此为止,PHP8中的构造方法和析构方法这两个知识点就讲解完毕了。

相关文章:

PHP8中的构造方法和析构方法-PHP8知识详解

今日分享的内容是php8中的构造方法和析构方法&#xff0c;我们把构造方法和析构方法这两个方法分开来讲&#xff1a; 1、构造方法 构造方法存在于每个声明的类中&#xff0c;主要作用是执行一些初始化任务。如果类中没有直接声明构造方法&#xff0c;那么类会默认地生成一个没…...

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 &#x1f34a;前言&#x1f438;方法一-CUDA Runtime生成&#x1f61d;debug设置 &#x1f345;方法二-空项目配置&#x1f349;&#x1f349;&#x1f349;代码验证 &#x1f34a;前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…...

MySQL面试题-索引的基本原理及相关面试题

先了解一下MySQL的结构 下面我们重点讲一下存储引擎 MySQL的数据库和存储数据的目录是一一对应的&#xff0c;这些数据库的文件就保存在磁盘中对应的目录里 下面我们来看一下对应的具体数据文件 .frm是表的结构&#xff0c;不管什么样的索引都会有 .ibd代表我们现在使用的存…...

MySQL学习笔记19

MySQL日志文件&#xff1a;MySQL中我们需要了解哪些日志&#xff1f; 常见日志文件&#xff1a; 我们需要掌握错误日志、二进制日志、中继日志、慢查询日志。 错误日志&#xff1a; 作用&#xff1a;存放数据库的启动、停止和运行时的错误信息。 场景&#xff1a;用于数据库的…...

为什么u盘在mac上显示不出来

插入U盘是个看似简单的操作&#xff0c;但有时候在Mac电脑上却出现了无法显示U盘的情况。这样的问题是非常让人头疼的&#xff0c;特别是当你急需使用U盘中的文件时。那么&#xff0c;究竟为什么U盘在Mac上会显示不出来呢&#xff1f;今天就让我们一起来深入了解一下这个问题&a…...

【golang】调度系列之sysmon

调度系列 调度系列之goroutine 调度系列之m 调度系列之p 在golang的调度体系中&#xff0c;除了GMP本身&#xff0c;还有另外一个比较重要的角色sysmon。实际上&#xff0c;除了GMP和sysmon&#xff0c;runtime中还有一个全局的调度器对象。但该对象只是维护一些全局的数据&…...

货物寄到英国选择什么物流比较划算?

随着全球化的发展&#xff0c;越来越多的企业开始将产品销售到海外市场&#xff0c;其中英国作为一个重要的贸易伙伴&#xff0c;吸引了大量的中国企业的关注。然而&#xff0c;如何将货物安全、快速地运送到英国&#xff0c;成为了众多企业面临的一个问题。那么&#xff0c;货…...

vite + react 基本项目搭建

新建项目步骤略过 1、下载scss 无需任何配置就可以直接使用scss了 pnpm install sass使用scss配置全局颜色变量 新建/src/styles/variable.scss并在 $primary: #76aef9在vite.cinfig.js里配置 export default defineConfig({css: {preprocessorOptions: {scss: {javascrip…...

一个方法解决三道区间问题

1288. 删除被覆盖区间 56. 合并区间 986. 区间列表的交集 # 1288. 删除被覆盖区间 class Solution:def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:# 按照起点升序排列&#xff0c;起点相同时&#xff0c;按照终点降序排列intervals.sort(key lamb…...

sub0 里斯本精彩回顾:探索波卡区块的创新空间

sub0 Europe 2023 已在葡萄牙里斯本圆满结束&#xff01;sub0 大会是波卡生态开发者大会&#xff0c;由波卡协议的主要开发方 Parity Technologies 举办的开发者大会&#xff0c;汇聚了全球 Substrate 开发者和学习者&#xff0c;旨在为 Polkadot 和 Kusama 生态的开发者、贡献…...

颜色+情感的英语表达还有这些,零基础学英语口语去哪里,柯桥有推荐的吗?

当我们探讨关于"blue"&#xff08;蓝色&#xff09;的多义性时&#xff0c;我们会发现英语中有许多其他词汇也有类似的双关意义。 既可以表示一种颜色或物理属性&#xff0c;又可以代表一种情感或心理状态。 这种现象在语言中很常见&#xff0c;反映了语言的丰富性和…...

exoplayer的使用-6,播放器的选择

需要一个能播放蓝光的,高码率的播放器,在使用现成的播放器的基础上,可选的有几个,exoplayer,vlc,ijk,mpv. exoplayer的更新频繁,适应性强,扩展性一般,因为它基于系统的硬解,音频可扩展,使用ffmpeg可以解决. 有国际化支持,音频,字幕这些显示效果好. 对杜比视频,hdr这些支持看设…...

Windows上安装 Go 环境

一、下载go环境 下载go环境&#xff1a;Go下载官网链接找到自己想下载的版本&#xff0c;点击下载&#xff0c;比如我这是windows64位的&#xff0c;我就直接点击最新的。 二、安装go环境 双击下载的.msi文件 next next 他默认的是c盘&#xff0c;你自己可以改&#xff0c;然…...

【设计模式】四、工厂模式

文章目录 概述工厂模式简单工厂模式&#xff1a;工厂方法模式抽象工厂模式小结 概述工厂模式 传统方式&#xff1a; 简单工厂模式&#xff1a; 简单工厂模式的设计方案: 定义一个可以实例化 Pizaa 对象的类&#xff0c;封装创建对象的代码。 存在的问题&#xff1a; 简单工厂…...

十九,镜面IBL--BRDF积分贴图

再回顾下镜面部分的分割求和近似法 现在关注第二部分 最后可化为 也就是说&#xff0c;这两部分积分可以获得F0的系数和F0的偏差。 这两个值可以存储到BRDF积分贴图的RG部分。void main() { vec2 integratedBRDF IntegrateBRDF(TexCoords.x, TexCoords.y); FragColor …...

Linux 创建 终止线程(thread)

进程线程区别 创建线程 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); -功能&#xff1a;创建一个子线程&#xff0c;一般情况下main函数所在的线程称为主线程&#xff0c;…...

【IPC 通信】信号处理接口 Signal API(6)

收发信号思想是 Linux 程序设计特性之一&#xff0c;一个信号可以认为是一种软中断&#xff0c;通过用来向进程通知异步事件。 本文讲述的 信号处理内容源自 Linux man。本文主要对各 API 进行详细介绍&#xff0c;从而更好的理解信号编程。 kill(2) 遵循 POSIX.1 - 2008 1.库 …...

ipaguard界面概览

ipaguard界面概览 ipaguard界面分左右2块&#xff1a;左边菜单导航栏&#xff0c;右边的功能区 左侧菜单&#xff1a;按模块分成启动界面&#xff0c;代码模块&#xff0c;文件模块&#xff0c;重签名与测试模块 右侧主功能区会随着功能变化&#xff0c;但是整体分3块&#xf…...

萌新的FPGA学习绪论-1

萌新的FPGA学习绪论-1 其实很多的课和内容都是相通的 我在跑完单周期的RiscV时候 虽然最后还差点意思但是基本的逻辑实现没有特别大的问题 过两天写一个Spec文档说明一下 由于开始一个新的设计 所以对于RiscV的设计暂时放到一边希望我能在接下来的时间内尽快完成 暂时不说这个…...

目标检测算法改进系列之Backbone替换为EMO

EMO&#xff1a;结合 Attention 重新思考移动端小模型中的基本模块 近年来&#xff0c;由于存储和计算资源的限制&#xff0c;移动应用的需求不断增加&#xff0c;因此&#xff0c;本文的研究对象是端侧轻量级小模型 (参数量一般在 10M 以下)。在众多小模型的设计中&#xff0…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...