<?php declare(strict_types=1); ini_set('display_errors', 'On'); ini_set('error_reporting', E_ALL); /** * Personal类 */ class Personal { private string $name; /** * 构造方法 */ public function __construct(string $name) { $this->name = $name; echo "创建【{$this->name}】的个人资料" . PHP_EOL; } /** * 析构方法 */ public function __destruct() { echo "销毁【{$this->name}】的个人资料" . PHP_EOL; } } $personal1 = new Personal('刘一'); $personal2 = new Personal('陈二'); $personal3 = new Personal('张三'); $personal4 = new Personal('李四'); $personal5 = new Personal('王五'); $personal4 = null; // 重要说明:这里会调用析构方法 unset($personal3); // 重要说明:这里会调用析构方法 $reference = $personal2; unset($personal2); // 重要说明:这里不会调用析构方法,因为对象还有引用 echo '程序执行到最后辣~~~' . PHP_EOL; // 输出结果 // -------------------------------------------------- // 创建【刘一】的个人资料 // 创建【陈二】的个人资料 // 创建【张三】的个人资料 // 创建【李四】的个人资料 // 创建【王五】的个人资料 // 销毁【李四】的个人资料 // 销毁【张三】的个人资料 // 程序执行到最后辣~~~ // 销毁【陈二】的个人资料 // 销毁【王五】的个人资料 // 销毁【刘一】的个人资料 //========== 总结 ==========// // 1、析构方法必须声明为public可见性,否则会报Warning错误。 // 2、析构方法和构造方法一样,不需要声明返回值。 // 3、将对象变量的值设为null或进行unset操作,会自动调用析构方法(前提是对象所有引用都已被删除)。 // 4、当程序执行完脚本最后一行代码会自动调用析构方法,若存在多个对象,那么后创建的对象会先调用析构方法, // 需要注意的是对象引用会影响调用析构方法的顺序,如上面的“$personal2”因为引用导致其调用析构方法提前了。
Copyright © 2024 码农人生. All Rights Reserved