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


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

    Image

    1、构造方法

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

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

    1. function__construct([mixed args]){
    2. //方法的内容
    3. }

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

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

    1.     class Fruit {
    2.         public $name;            //定义成员变量
    3.         public $num;             //定义成员变量
    4.           public function __construct($name, $num) { //定义构造方法
    5.             $this->name=$name;                     //调用本类的成员变量
    6.             $this->num=$num;                    //调用本类的成员变量
    7.         }
    8.         public function showFruit(){             //定义成员方法
    9.              if($this->num>300){
    10.                 return $this->name."的库存充足,不需要进货!";
    11.             }else{
    12.                 return $this->name. "的库存数量不多了,需要尽快进货!";
    13.             }
    14.         }
    15.     }
    16.     $f1=new Fruit ("橘子",600);                 //类的实例化并传递参数
    17.     echo $f1->showFruit ();                    //调用方法
    18.     echo "
      "
      ;  
    19.     $f2=new Fruit ("柚子",100);               //类的实例化并传递参数
    20.     echo $f2->showFruit ();                   //调用方法
    21. ?>

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

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

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

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

    2、析构方法

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

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

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

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

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

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

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

    定义析构方法参考代码:

    1.     class Fruit {
    2.         public $name;                               //定义成员变量
    3.         public $num;                                //定义成员变量
    4.         public function __construct($name,$num){   //定义构造方法
    5.             $this->name=$name;                     //调用本类的成员变量
    6.             $this->num=$num;                    //调用本类的成员变量
    7.         }
    8.         public function showFruit (){         //定义成员方法
    9.              if($this->num>600){
    10.                 return $this->name."的库存充足,不需要进货!";
    11.             }else{
    12.                 return $this->name."的库存数量不多了,需要尽快进货!";
    13.             }
    14.         }
    15.         public function __destruct(){            //定义析构方法
    16.             echo "析构函数被调用了,对象Fruit被销毁了!
      "
      ;
    17.         }
    18.     }
    19.     $f1=new Fruit("梨",800);                    //类的实例化并传递参数
    20.     $f2=new Fruit("葡萄",100);                  //类的实例化并传递参数
    21. ?>

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

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

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

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

  • 相关阅读:
    人类大脑皮层折叠的遗传结构
    Ros2 学习02- ubuntu22.04 安装ros2
    一分钟解决 The server selected protocol version TLS10 is not accepted 问题
    计算机毕业设计ssm+vue+elementUI 基于vue的消防物资存储系统
    go 学习 之 HTTP微服务示例
    供应链 | M&SOM论文解读:零售商响应定价能力对供应链韧性的影响
    网络安全CTF比赛有哪些事?——《CTF那些事儿》告诉你
    从指针开始变强(三)之超级详细运算题
    C++ Reference: Standard C++ Library reference: C Library: cstring: strchr
    软件设计师笔记-----系统安全分析与设计
  • 原文地址:https://blog.csdn.net/u010292470/article/details/133174464