浅谈PHP面向对象编程(三、构造方法和析构方法)

牧云@^-^@ 提交于 2020-03-10 05:33:44

3.0 构造方法和析构方法

从我之前的博客可以发现,实例化一个类的对象后,如果要为这个对象的属性赋值,需要直接访问该对象的属性。如果想要在实例化对象的同时就为这个对象的属性进行赋值,则可以通过构造方法来实现。构造方法是类的一个特殊成员,它会在类实例化对象时自动调用,用于对类中的成员进行初始化。与构造方法对应的是析构方法,它在对象销毁之前被自动调用。用于完成清理工作。本节将针对构造方法和析构方法进行详细讲解。

3.1 构造方法

 

 在每个类中,都有一个构查方法,在创建对象时会被自动调用。如果在类中没有显式声明它,PHP会自动生成一一个没有参数、且没有任何操作的默认构造方法。当在类中显式声了构造方法时默认构造方法将不存在。声明构造方法和声明成员方法类似,其语法格式如下 

 

1 修饰符 function __construct(参数列表){
2           //初始化操作  
3 }

 

在上述语法格式中.需要注意的是构造方法的名称必须为  __construct 修饰符可以省略默认为pablic.接下来通过一个案例来学习构造方法的使用,如例3-6所示。

 

 1  <?php
 2      class Person{
 3          public $name;//成员属性$name,存储姓名
 4          public $age; //成员属性$age,存储年龄
 5          //声明一个构造方法,将来创建对象时,为对象的成员属性赋予初始值
 6          function __construct($name,$age){
 7              //使用传入的参数$name为成员属性$this->name赋初值
 8              $this->name = $name; 
 9              //使用传入的参数$age为成员属性$this->age赋初值
10              $this->age = $age;    
11          }
12          function show(){
13             echo $this->name.' = '.$this->age;
14          }
15      }
16     $p1 = new Person("kimi",9);
17     $p1->show();
18 ?>

 

 

运行结果

 

例3-6中,通过构造方法实现了在创建对象的同时给对象中的属性赋值的功能。在第6-11行代码中声明了Person 类的构造方法,用于初始化$name和$age属性。在第16行代码中,创建Person对象$p1时调用构造函数,从而完成对象的初始化。 最后在第12行代码调用了$p1的show()方法,输出初始化的结果。
值得一提的是,在PHP5之前的版本中,构造方法名和类名相同,这种方式在PHP5中仍然可以使用,但应该尽量将构造方法命名为_ _construcet0. 其优点是可以使构造方法独立于类名,当类名发生变化时不需要更改相应的构造方法名称。为了向下兼容,创建对象时,如果一个类中没有名为_ _constuct()的构造方法,PHP将寻找与类名同名的构造方法执行,如果找不到,则执行默认的空构造方法。

 

注意:
(1)构造方法没有返回值。
(2)构造方法的作用是完成对新对象的初始化,并不是创建对象本身。
(3)在创建新对象后,系统会自动调用该类的构造方法。不需要手动调用。
(4)一个类有且只有一个构造方法,在PHP5后虽然_ construct()和类名()可以共存,但只能使用一个。
(5)构造方法和普通方法一样,可以访问类属性和方法,也有访问控制修饰符,还可以被其他方法调用

 

3.2 析构方法
析构方法是PHIPS中新添加的内容。它在对象销毁之前会被自动调用,用于释放内存。其语法格式具体如下:

1 function __destruct(){
2 
3       //清理操作
4 }

 

 

但需要注意的是,析构方法的名称必须为 __destruct(),且析构方法中不带任何参数,接下来通过案例来深入了解析构方法的使用。

例3-7

 1  <?php
 2     class Person{
 3         public function show(){
 4             echo "大家好,我是Person类的对象<br>";
 5         }
 6         //声明析构方法,在对象销毁前自动调用
 7         function __destruct(){
 8             echo "对象被销毁";
 9         }
10     }
11      $p1 = new Person();
12     $p1->show();
13 ?>

 

运行结果

在例3-7中,第7-9行代码定义了Person 类的析构方法。在程序结束前,会销毁创建的$p1对象,此时会调用$p1的析构方法,井在浏览器中输出” 对象被销毁。

多学一招:垃圾回收

在PHP中使用了一种“垃圾回收”机制。即自动清理不再使用的对象,释放内存,析构方法也会自动被调用。所以在一般情况下不需要手动调用析构方法,只需明确析构方法的在何时被调用的即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!