WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程之垃圾回收——析构方法

在PHP面向对象编程中,大家对构造方法并不陌生,也就是在一个类进行实例化就执行的方法被称为构造方法。
而析构方法刚好相反,就是一个对象在销毁前自动调用的方法,就是析构方法。
在实际应用中,构造方法,也许经常的使用,可析构方法我们不太使用,但这并不表明析构方法的作用小于构造方法。
其实,在PHP4中,程序运行之后,垃圾回收的问题一直是一个问题,比如,一个对象销毁之后一些对象访问过的其它引用就成了垃圾,例如关闭文件,释放结果集等。当然PHP有自己的垃圾回收机制,当对象不能被访问时就会启动垃圾回收程序,收回对象在内存堆中占用的内存空间。而PHP5的析构方法正是在垃圾回收程序回收对象之前调用的。
析构方法的声明与构造方法的格式相似,也是以固定的方法名“__destruct()”,区别的是析构方法不能带任何的参数。
下面用一个小小的实例说明析构方法的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<span style="color: #339933"><!--</span>p
<span style="color: #000000;font-weight: bold">class</span> website <span style="color: #009900">{</span>
	<span style="color: #000000;font-weight: bold">private</span> <span style="color: #000088">$webName</span><span style="color: #339933">;</span>
	<span style="color: #000000;font-weight: bold">private</span> <span style="color: #000088">$webUrl</span><span style="color: #339933">;</span>
 
	<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">function</span> __construct<span style="color: #009900">(</span><span style="color: #000088">$webName</span><span style="color: #339933">,</span><span style="color: #000088">$webUrl</span><span style="color: #009900">)</span><span style="color: #009900">{</span><span style="color: #666666;font-style: italic">//构造方法</span>
		<span style="color: #000088">$thi</span><span style="color: #339933">--></span><span style="color: #004000">webName</span><span style="color: #339933">=</span><span style="color: #000088">$webName</span><span style="color: #339933">;</span>
		<span style="color: #000088">$this</span><span style="color: #339933">-&</span>gt<span style="color: #339933">;</span>webUrl<span style="color: #339933">=</span><span style="color: #000088">$webUrl</span><span style="color: #339933">;</span>
	<span style="color: #009900">}</span>
 
	<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">function</span> run<span style="color: #009900">(</span><span style="color: #009900">)</span><span style="color: #009900">{</span>
		<span style="color: #b1b100">echo</span> <span style="color: #0000ff">"网站名称:"</span><span style="color: #339933">.</span><span style="color: #000088">$this</span><span style="color: #339933">-&</span>gt<span style="color: #339933">;</span>webName<span style="color: #339933">.</span><span style="color: #0000ff">""</span><span style="color: #339933">;</span>
		<span style="color: #b1b100">echo</span> <span style="color: #0000ff">"网站地址:"</span><span style="color: #339933">.</span><span style="color: #000088">$this</span><span style="color: #339933">-&</span>gt<span style="color: #339933">;</span>webUrl<span style="color: #339933">;</span>
	<span style="color: #009900">}</span>
 
	<span style="color: #000000;font-weight: bold">public</span> <span style="color: #000000;font-weight: bold">function</span> __destruct<span style="color: #009900">(</span><span style="color: #009900">)</span><span style="color: #009900">{</span>
		<span style="color: #b1b100">echo</span> <span style="color: #0000ff">"关闭站点:"</span><span style="color: #339933">.</span><span style="color: #000088">$this</span><span style="color: #339933">-&</span>gt<span style="color: #339933">;</span>webName<span style="color: #339933">;</span>
	<span style="color: #009900">}</span>
<span style="color: #009900">}</span>
 
<span style="color: #000088">$web</span><span style="color: #339933">=</span><span style="color: #000000;font-weight: bold">new</span> website<span style="color: #009900">(</span><span style="color: #0000ff">"WEB开发笔记"</span><span style="color: #339933">,</span><span style="color: #0000ff">"http://www.chhua.com"</span><span style="color: #009900">)</span><span style="color: #339933">;</span>
<span style="color: #000088">$web</span><span style="color: #339933">-&</span>gt<span style="color: #339933">;</span>run<span style="color: #009900">(</span><span style="color: #009900">)</span><span style="color: #339933">;</span>
?<span style="color: #339933">&</span>gt<span style="color: #339933">;</span>

以上,就是声明了一个析构方法,如果对象失去引用,就会调用析构方法并且输出一条语句。