例子:
<?php class test{ function __destruct(){ echo "当对象销毁时会调用!!!"; } } $a = $b = $c = new test(); $a = null; unset($b); echo "<hr />"; ?>
此例子,如下图,有三个变量引用$a,$b,$c指向test对象,test对象就有3个引用计数,当$a = null
时,$a对test对象的引用丢失,计数-1,变为2,当$b被unset()
时,$b对test对象的引用也丢失了,计数再-1,变为1,最后页面加载完毕,$c指向test对象的引用自动被释放,此时计数再-1,变为0,test对象已没有变量引用,就会被销毁,此时就会调用析构函数。
在PHP中析构方法并不是很常用,它属于类中可选的一部分,只有需要时才在类中声明。
<?php class Person{ var $name; var $sex; var $age; function __construct($name, $sex, $age){ $this->name = $name; $this->sex = $sex; $this->age = $age; } function __destruct(){ echo "再见" . $this->name . "<br />"; } } $person1 = new Person("张三三", "男", 23); $person1 = null; //第一个对象将失去引用 $person2 = new Person("李四四", "女", 17); $person3 = new Person("王五五", "男", 43); ?>
运行结果:
再见张三三
再见王五五
再见李四四
第一个对象在声明完成以后,它的引用就被赋予了空值,所以第一个对象最先失去的引用,不能再被访问了,人后自动调用第一个对象中的析构方法输出“再见张三三”。后面声明的两个对象都是在页面执行结束时失去的引用,也都自动调用了析构方法。但因为对象的引用都是放在栈内存中的,由于栈的后进先出特点,最后创建的对象会被最先释放,多以先自动调用第三个对象的析构方法,最后才调用第二个对象的析构方法。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。