• 浅谈PHP面向对象编程(三)


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

  • 相关阅读:
    redhat安装opencv
    vsftpd的配置与使用
    Redhat 安装编译 Python-2.7.12
    YUM 安装与配置
    docker安装mysql
    高频问题 java8新特性(转载)
    quartz简单实例实现
    java8线程池
    java8多线程不带返回值
    java8多线程带返回值的
  • 原文地址:https://www.cnblogs.com/Prinlily/p/9808536.html
Copyright © 2020-2023  润新知