析构方法
1.析构方法会自动调用
2.析构方法主要用于销毁资源(比如释放数据库的链接,图片资源…销毁某个对象…);
析构函数会在到对象的所有的引用都被删除或者当对象被显示销毁时执行
3.析构方法调用顺序是,先创建的对象后被销毁
4. 析构方法什么时候被调用
(1) 当程序(进程结束)退出时
(2) 当一个对象称为垃圾对象的时候,该对象的析构方法也会被调用,
(3) 所谓垃圾对象,就是指,没有任何变量再引用它.
(4) 一旦一个对象成为垃圾对象,析构方法就会立即调用
析构方法小结:
①php5加入的的析构方法function __destruct()
②析构方法没有返回值也不接受参数
③主要作用是释放资源的操作,并不是销毁对象本身。
④在销毁对象前,系统自动的调用该类的析构方法
⑤一个类最多只有一个析构方法。
析构方法实例1:
<?php class Person { public $name; public $age; public $conn; //构造方法 public function __construct($name, $age) { $this->name = $name; $this->age = $age; //假设此处有一个打开一个$conn链接数据库资源的函数体 } //写一个析构方法 __ 是两个下划线 function __destruct() { echo $this->name . " 销毁资源 关闭数据库 . .
"; } } $p1 = new Person("1.贾宝玉", 16); $p1 = null; //$p1掷空是对其对应地址下标掷空,如$p1[0x678],即掷空了中括号中的数据,地址对应的数并没有改变。 //$p1掷空马上就要被销毁,所以p1p2p3的销毁顺序为:$p1->$p3->$p2 $p2 = new Person("2.林黛玉", 14); $p3 = new Person("3.王熙凤", 15); ?>
析构方法实例2:
<?php //创建一个人类 class Person { //下面是人的成员属性 public $name; //人的名子 public $sex; //人的性别 public $age; //人的年龄 //定义一个构造方法参数为姓名$name、性别$sex和年龄$age public function __construct($name, $sex, $age) { //通过构造方法传进来的$name给成员属性$this->name赋初使值 $this->name = $name; //通过构造方法传进来的$sex给成员属性$this->sex赋初使值 $this->sex = $sex; //通过构造方法传进来的$age给成员属性$this->age赋初使值 $this->age = $age; } //这个人的说话方法 function say() { echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age . "
"; } //这是一个析构函数,在对象销毁前调用 function __destruct() { echo "再见" . $this->name . "
"; } } //通过构造方法创建3个对象$p1、p2、$p3,分别传入三个不同的实参为姓名、性别和年龄 $p1 = new Person("张三", "男", 20); $p2 = new Person("李四", "女", 30); $p3 = new Person("王五", "男", 40); //下面访问$p1对象中的说话方法 $p1->say(); //下面访问$p2对象中的说话方法 $p2->say(); //下面访问$p3对象中的说话方法 $p3->say(); ?>
运行结果:
我的名子叫:张三 性别:男 我的年龄是:20
我的名子叫:李四 性别:女 我的年龄是:30
我的名子叫:王五 性别:男 我的年龄是:40
再见王五
再见李四
再见张三