构造函数与析构函数的原理分析-PHP问题

资源魔 20 0

结构函数

__construct ([ mixed $args [, $... ]] ) : void

PHP 5 允行开发者正在一个类中界说一个办法作为结构函数。具备结构函数的类会正在每一次创立新工具时先挪用此办法,以是十分适宜正在应用工具以前做一些初始化工作。

(保举教程:php教程)

留意:假如子类中界说了结构函数则没有会隐式挪用其父类的结构函数。要执行父类的结构函数,需求正在子类的结构函数中挪用 parent::__construct()。假如子类不界说结构函数则会好像一个一般的类办法同样从父类承继(如果不被界说为 private 的话)。

代码示例:

<?php
class BaseClass {
  function __construct() {
    print "In BaseClass constructor\n";
  }
}

class SubClass extends BaseClass {
  function __construct() {
    parent::__construct();
    print "In SubClass constructor\n";
  }
}

class OtherSubClass extends BaseClass {
  // inherits BaseClass's constructor
}

// In BaseClass constructor
$obj = new BaseClass();

// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();

// In BaseClass constructor
$obj = new OtherSubClass();
?>

为了完成向后兼容性,假如 PHP 5 正在类中找没有到 __construct() 函数而且也不从父类承继一个的话,它就会测验考试寻觅新式的结构函数,也就是以及类同名的函数。因而惟一会孕育发生兼容性成绩的状况是:类中已有一个名为 __construct() 的办法却被用于其它用处时。

与其它办法没有同,当 __construct() 被与父类 __construct() 具备没有同参数的办法笼罩时,PHP 没有会孕育发生一个 E_STRICT谬误信息。

自 PHP 5.3.3 起,正在定名空间中,与类名同名的办法再也不作为结构函数。这一扭转没有影响没有正在定名空间中的类。

代码示例:

<?php
namespace Foo;
class Bar {
  public function Bar() {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
  }
}

析构函数

__destruct ( void ) : void

PHP 5 引入了析构函数的概念,这种似于其它面向工具的言语,如 C++。析构函数会正在某个工具的一切援用都被删除了或许当工具被显式销毁时执行。

代码示例:

<?php
class MyDestructableClass {
  function __construct() {
    print "In constructor\n";
    $this->name = "MyDestructableClass";
  }

  function __destruct() {
    print "Destroying " . $this->name . "\n";
  }
}

$obj = new MyDestructableClass();

以及结构函数同样,父类的析构函数没有会被引擎暗中挪用。要执行父类的析构函数,必需正在子类的析构函数体中显式挪用 parent::__destruct()。别的也以及结构函数同样,子类假如本人不界说析构函数则会承继父类的。

析构函数即便正在应用 exit() 终止剧本运转时也会被挪用。正在析构函数中挪用 exit() 将会停止其他封闭操作的运转。

以上就是结构函数与析构函数的原理剖析的具体内容,更多请存眷资源魔其它相干文章!

标签: php教程 构造函数 析构函数 php故障解决 php使用问题

抱歉,评论功能暂时关闭!