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

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

1、构造方法

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

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

复制代码
function__construct([mixed args]){
//方法的内容
}

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

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

复制代码
<?php
    https://www.phpfw.com/tag/class/ Fruit {
        https://www.phpfw.com/tag/public/ $name;            //定义https://www.phpfw.com/tag/chengyuanbianliang/
        public $num;             //定义成员变量
          public function __construct($name, $num) { //定义构造方法
            $this->name=$name;                     //调用本类的成员变量
            $this->num=$num;                    //调用本类的成员变量
        }
        public function showFruit(){             //定义https://www.phpfw.com/tag/chengyuanfangfa/
             if($this->num>300){
                return $this->name."的库存充足,不需要进货!";
            }https://www.phpfw.com/tag/else/{
                return $this->name. "的库存数量不多了,需要尽快进货!";
            }
        }
    }
    $f1=new Fruit ("橘子",600);                 //https://www.phpfw.com/tag/leideshilihua/并传递参数
    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 "析构https://www.phpfw.com/tag/hanshu/被调用了,对象Fruit被销毁了!<br />";
        }
    }
    $f1=new Fruit("梨",800);                    //类的实例化并传递参数
    $f2=new Fruit("葡萄",100);                  //类的实例化并传递参数
?>

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

复制代码
析构函数被调用了,对象Fruit被销毁了!
析构函数被调用了,对象Fruit被销毁了!

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

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

相关推荐
ServBay2 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954485 小时前
CTF 伪协议
php
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php