文章教程

14.2.3构造函数和析构函数

9/17/2020 9:26:54 PM 人评论 次浏览

14.2.3 构造函数和析构函数

在一个类中声明一个名为__construct的函数,这个函数称作构造函数,它在建立一个对象实例时被自动调用。注意,关键字construct之前的__是两个下划线。就像其他任何函数一样,构造函数可以带有参数。通常,在构造函数中使用这些参数完成对象属性的初始化等操作。在类中定义一个名为__destruct的函数,它称为析构函数,PHP将在对象被销毁前自动调用这个函数。

另外一种命名构造函数和析构函数的方式是,使用类的名称。比如一个名叫Cat的类,在类定义时命名一个名叫Cat()的函数,那么这个函数就是构造函数。刚才介绍的第一种声明构造函数的方法,可以使构造函数有一个独一无二的名称,而不论它所在的类的名称是什么。这样在改变类的名称时,就不再需要改变构造函数的名称。

不论使用哪种定义构造函数的方式,如果在构造函数中使用了参数,那么在使用new运算符创建该类的对象时,必须传入参数,除非构造函数的参数使用了默认值,如下面的示例代码所示。


01 <?php

02 class Student

03 {

04 private$id,$name;//私有成员变量$name

05 public function__construct($s_id,$s_name)//构造函数

06 {

07 $this->id=$s_id;

08 $this->name=$s_name;

09 }

10 }

11

12 $stu=new Student(1,'George Wesley');//实例化类的同时会调用构造函数

13 ?>


【代码解析】这段代码定义构造函数时指定了两个参数$id和$name,如代码第5行所示。当使用new操作符创建Student类的对象$stu时,传入了参数,如代码第15行所示。执行代码new Student(1,'George Wesley')时,就会调用类的构造函数__construct($s_id,$s_name),将1传给构造函数的第1个参数$s_id,将'Weslye'传给构造函数的第2个参数$s_name。代码14-2进一步演示了构造函数和析构函数的使用方法及调用情况。

代码14-2 使用构造函数和析构函数14-2.php


01 <?php

02 class Cat

03 {

04 private$name;//私有成员变量$name

05 function__construct()//构造函数

06 {

07 echo"<b>构造函数被调用……</b><br/><br/>";

08 }

09 function__destruct()//析构函数

10 {

11 echo"<b>析构函数被调用……</b><br/><br/>";

12 }

13 function set_name($name)//成员函数set_name()

14 {

15 $this->name=$name;

16 }

17 function get_name()//构造函数get_name()

18 {

19 echo"这只猫的名字叫:".$this->name."<br/><br/>";

20 }

21 }

22

23 $mypet=new Cat;

24 echo"__construct()调用之后<br/><br/>";

25 $mypet->set_name("小白");

26 $mypet->get_name();

27 echo"类方法get_name()调用之后<br/><br/>";

28 ?>


【代码解析】这段代码加入了构造函数和析构函数,它的执行结果如图14-2所示。从这个执行结果可以清楚地看出,构造函数和析构函数在PHP程序中分别如何调用。当使用代码$mypet=new Cat创建一个Cat类的对象$mypet时,构造函数__construct()首先被调用,向页面输出一段“构造函数被调用……”的信息。然后使用Cat类的set_name()设置对象$mypet的名字、使用get_name()获取对象的名字。当这一切执行完毕后,PHP自行调用析构函数__destruct()来撤销对象$mypet所占内存资源,同时向页面输出一段构造函数已经调用的信息。

图 14-2 调用构造函数和析构函数

构造函数通常用来初始化对象的属性,即为创建的对象分配内存空间。代码14-2只是演示了在PHP程序中构造函数如何调用,因此并没有做Cat类属性的初始化操作,只是输出一段信息,表明该构造函数已经调用。析构函数,与构造函数相反。PHP调用它将一个对象从内存中销毁,回收其占用的内存空间。默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源。析构函数允许在使用一个对象之后执行任意代码来清除内存。

提示 当PHP程序不再与对象相关时,析构函数就会被调用。通常,这会发生在执行return语句的时候。对于全局变量,这会发生于PHP脚本结束的时候。如果在程序中想明确地销毁一个对象,可以给指向该对象的变量分配任何其他的值,一般将该对象变量的赋值为NULL或者调用unset()。

教程类别