7.5 构造和析构

2017-06-23  本文已影响12人  57fc17b7d598

构造函数

一个类在实例化时自动运行的函数叫构造函数,在PHP的新版中需要命名为__construct,而在此之前一直都是使用和类名相同的名字命名。

如果子类是继承于父类时,子类的构造函数中并不会自动调用父类的构造函数,需要手动通过 parent::__construct() 调用。

// 父类
class Foo{
    public function __construct(){
        echo "<p>Foo::__construct</p>";
    }
}

// 子类
class Bar extends Foo{
    public function __construct(){
        parent::__construct();
        echo "<p>Bar::__construct</p>";
    }
}

// 实例化
$bar = new Bar();

// 最终输出
/*
Foo::__construct

Bar::__construct
*/

析构函数

和构造函数相反,析构函数将在当前对象的所有引用都被删除或是对象被显示删除时执行。

// 父类
class Foo{
    // 析构函数
    public function __destruct(){
        echo 'Hello ';
    }
}

// 子类
class Bar extends Foo{
    // 析构函数
    public function __destruct(){
        // 需显示调用父类的析构函数
        parent::__destruct();
        echo 'World';
    }
}

// 实例化
$bar = new Bar();

/*

    最终输出
    Hello World
    
*/

这段代码中并没有明显的删除对象的形式,但析构函数却能执行,原因是脚本运行结束后,对象都被回收了。

当试图通过 exit() 等函数结束脚本时,析构函数也会被调用。

不要在析构函数中抛出异常,否则会报错。

上一篇下一篇

猜你喜欢

热点阅读