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

2023-09-22 16:00:45

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

Image

1、构造方法

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

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

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

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

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

<?php
    class 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 停止请求的时候。

定义析构方法参考代码:

<?php
    class 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中的构造方法和析构方法这两个知识点就讲解完毕了。

更多推荐

2023上半年薪资报告出炉!人均月入过万?!

最近,大家都有听到经济回暖的消息吧?经过三年口罩大考之后,2023年上半年各行各业都迎来复苏,关于职场的话题讨论也不绝于耳。现在就业环境如何?哪些行业更有前途?大家在求职时是选择一线城市还是回二、三线城市?……对于这一系列职场话题,近期猎聘发布的《2023上半年人才流动与薪酬趋势报告》中,列举了很多关于当前人才市场的趋

一台PoE交换机可以为多少个设备提供供电?

如今在安防监控领域,许多网络设备都支持PoE供电。在网络监控工程中,为了节省布线成本并提高便捷性,大多数工程商选择使用PoE供电方案,也就是使用PoE交换机为监控摄像头提供电力。那么,一台功率输出以太网(PoE)工业交换机能够为多少个设备提供电力呢?1、PoE交换机供电标准对于初次接触PoE供电的朋友来说,可能对PoE

使用Selenium进行网页登录和会话管理

随着互联网的快速发展,网页登录和会话管理是许多网站和应用程序的基本功能。通过网页登录,用户可以访问个人账户、购物车订单、历史记录等个性化信息。为了提高用户体验和效率,自动化登录和会话管理成为一个重要的需求。而Selenium作为一种强大的Web自动化工具,为开发人员提供了便捷的方式来实现这些功能。例如我们在访问京东网站

LC926. 将字符串翻转到单调递增(JAVA - 动态规划)

将字符串翻转到单调递增题目描述动态规划题目描述难度-中等LC926.将字符串翻转到单调递增(JAVA-动态规划)如果一个二进制字符串,是以一些0(可能没有0)后面跟着一些1(也可能没有1)的形式组成的,那么该字符串是单调递增的。给你一个二进制字符串s,你可以将任何0翻转为1或者将1翻转为0。返回使s单调递增的最小翻转次

@SpringBootApplication注解说明(InsCode AI 创作助手)

@SpringBootApplication是SpringBoot中的一个关键注解,用于标识一个类是SpringBoot应用程序的主应用程序类。在这篇文章中,我们将详细解释@SpringBootApplication注解以及它在SpringBoot应用程序中的作用。@SpringBootApplication注解的作用

Docker容器数据持久化存储机制

这里写目录标题一、Docker容器数据持久化存储介绍二、Docker容器数据持久化存储方式三、Docker容器数据持久化存储方式应用案例演示3.1dockerrun-v3.1.1创建了本地目录3.1.2未创建本地目录3.2volumes3.2.1创建数据卷3.2.2使用数据卷一、Docker容器数据持久化存储介绍物理机

记录一次久远git仓库迁移

因为项目需求,公司收购了一个第三方的项目,包含源码。需要将该项目上传到我们公司自己的gitlab上。没过脑子一顿操作://查询远程链接gitremote-v//删除原有链接gitremotermorigin//如果需要修改分支名gitbranch-moldnamenewname//修改为自己的gitlab地址gitre

美创科技参编《数字政府建设与发展研究报告(2023)》 正式发布

9月14日,中国信息通信研究院云计算与大数据研究所牵头编制的《数字政府建设与发展研究报告(2023)》正式发布。美创科技结合在政务数据安全领域的丰富实践经验,参与报告编写。《数字政府建设与发展研究报告》以“技术、业务、数据融合发展路径探索”为主题,剖析当前数字政府建设时代内涵,梳理当前数字政府建设与发展现状,从技术、业

算法基础之二分查找

原题链接一、二分查找中的mid+1和mid-1的问题二分查找中的边界问题处理不好很容易导致死循环和计算错误的问题,以题目数的范围为例。题目大意​二分查找重复数第一次出现的位置和最后一次出现的位置。数学含义​第一次位置即找到一个长度最大的>=X区间的左边界​最后一次位置即找到一个长度最大的>=X区间的右边界注意找的目标是

大数据——Spark SQL

1、SparkSQL是什么SparkSQL是Spark中用于处理结构化数据的一个模块,前身是Shark,但本身继承了前身Hive兼容和内存列存储的一些优点。SparkSQL具有以下四个特点:综合性(Integrated):Spark中可以加入SQL查询,也可以使用DataFrameAPI,其中API提供了多种语言选择,

[C++随笔录] vector模拟实现

vector模拟实现基本结构天选之子构造拷贝构造析构operator=空间reserveresizesize&&capacity增insertpush_back删erasepop_back查&&改swapoperator[]源码基本结构//可以是不同类型,用类模板template<classT>classvector{

热文推荐