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

  • 相关阅读:
    电感和感抗
    电容和容抗
    ULN2003A驱动12V继电器
    5V转3.3V(TPS73101)
    电解电容和钽电容的区别
    svn 报错 Previous operation has not finished; run 'cleanup' if it was interrupted
    html格式 保持原样输出的标签
    微信公众号开发
    Hibernate各种主键生成策略与配置详解
    SVN符号说明
  • 原文地址:https://www.cnblogs.com/hytx/p/6665260.html
Copyright © 2011-2022 走看看