zoukankan      html  css  js  c++  java
  • PHP构造方法和析构函数

    <?php

    // 构造方法PHP5可以在类中使用__construct()定义一个构造函数,具有构造函数的类,会在每次对象创建的时候调用该函数,

    //因此常用来在对象创建的时候进行一些初始化工作。

    class Person {

        public  $name;

        public  $age;

        public  function __construct($name,$age)

        {

            

            $this->name = $name;

            $this->age = $age;

            echo $this->name."被创建!<br/>";

            

        }

        // 析构方法 析构方法指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数

        public function __destruct() 

        {

         // 释放资源

            echo $this->name."被销毁!<br/>";

        }

    }

    $people = new Person("大强",20);

    echo $people->name."<br/>";

    $people1 = new Person("小强",20);

    //详细解说:

    父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct() 。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。 

    析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。 

    Note:

    析构函数在脚本关闭时调用,此时所有的 HTTP 头信息已经发出。脚本关闭时的工作目录有可能和在 SAPI(如 apache)中时不同。

    Note:

    试图在析构函数(在脚本终止时被调用)中抛出一个异常会导致致命错误。

    完全分析:

    构造函数和析构函数,先说明一下同一个类的对象之间的不同之处:首先,对象名不相同。其次,对象的数据成员的值不相同。我们在声明一个对象时,可以 对其初始化。如果对其初始化,那么程序会向操作系统申请为其分配一定的内存空间,在为其分配内存空间时,会将初始化写入内存单元中。问题是,我们不能像初 始化一般变量那样,在对其初始化时,将初始值写入内存单元中,这是因为相对于这种初始化方法来说,类的对象太过复杂。

    构造函数:我们用构造函数来初始化类的对象。C++在创建对象时,都会调用构造函数。构造函数是一种特殊的类成员函数,当然可以直接访问类的所有数据成员;可以是内联函数,可以有形参列表,可以有默认形参值,可以重载。

    我们可以将一个变量的值,赋给同一类型的另一个变量,对于类的对象来说,也可以将一个对象的内容,拷贝给同一类的另一个对象。拷贝的方法可以是将一 个对象的数据变量的值,分别赋给另一个对象的相应数据变量。但是如果数据变量很多,这种方法就显得有些麻烦。也可以用一种特殊的构造函数,来实现用一个已 经存在的对象来初始化另一个对象这种功能。

    拷贝构造函数:一种特殊的构造函数,也是用来构造对象的,具有构造函数的所有特性。拷贝构造函数能利用一个已存在的对象初始化同一类的另一个对象。拷贝构造函数的形参是本类的对象的引用。(为什么必须是引用?)

    拷贝构造函数在以下三种情况下会被调用:当用类的一个对象初始化该类的另一个对象时,系统自动调用拷贝构造函数实现对象间的拷贝赋值;当某个函数的 形参是某个类的对象时(可以是对象的引用吗?),当调用这个函数,实参赋值给形参时,系统就自动调用拷贝构造函数;当某个函数的返回值是某个类的对象时, 调用拷贝构造函数。最后的一种情况:函数func的返回值是A,对象A是在函数func内部的局部变量,当函数func执行完之后就被释放。调用函数 func的语句是:B=func()。对象B是这样被对象A赋值的:当编译器执行B=func()时,会创建一个临时无名变量。当func函数执行 return A;语句之时,实际是调用拷贝构造函数,将对象A的值拷贝给那个临时变量,之后释放A占用的内存空间。之后再用拷贝构造函数,将临时变量的值拷贝到对象B 中。

    析构函数:自然万物都有生命周期,类的对象也不例外。如果在某一个函数中声明了一个对象,在函数执行结束,返回调用函数时,声明的对象就会被释放。 析构函数的作用与构造函数的相反。析构函数是在对象要被删除时,系统自动调用的。执行完析构函数之后,对象占用的内存被释放。如果我们希望在删除对象时做 一些相关的清理工作,就可以把它们写在该类的析构函数中。

    PS:大强原创:详细如有不懂请联系:18825121252

  • 相关阅读:
    HTML5结构
    HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素
    CF GYM 100703G Game of numbers
    CF GYM 100703I Endeavor for perfection
    CF GYM 100703K Word order
    CF GYM 100703L Many questions
    CF GYM 100703M It's complicate
    HDU 5313 Bipartite Graph
    CF 560e Gerald and Giant Chess
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/hytx/p/6665260.html
Copyright © 2011-2022 走看看