ホームページ  >  記事  >  バックエンド開発  >  コンストラクターとデストラクターの原理分析

コンストラクターとデストラクターの原理分析

王林
王林転載
2020-07-10 17:56:492947ブラウズ

コンストラクターとデストラクターの原理分析

Constructor

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

PHP 5 では、開発者がクラス内のコンストラクターとしてメソッドを定義できます。コンストラクターを持つクラスは、新しいオブジェクトが作成されるたびにこのメソッドを呼び出すため、オブジェクトを使用する前に初期化作業を行うのに非常に適しています。

(推奨チュートリアル: php チュートリアル)

注: コンストラクターがサブクラスで定義されている場合、その親クラスのコンストラクターは暗黙的に呼び出されません。親クラスのコンストラクターを実行するには、子クラスのコンストラクターでparent::__construct()を呼び出す必要があります。サブクラスでコンストラクターが定義されていない場合、通常のクラス メソッドと同様に親クラスから継承されます (プライベートとして定義されていない場合)。

コード例:

<?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&#39;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
  }
}

Destructor

__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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。