ホームページ >バックエンド開発 >PHPチュートリアル >PHP:コンストラクタとデストラクタのインスタンスの使い方を詳しく解説

PHP:コンストラクタとデストラクタのインスタンスの使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-06-26 14:38:161526ブラウズ

Constructor

void construction ([mixed $args [, $... ]] )

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

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

例 #1 新しい標準コンストラクターの使用

<?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();
?>

出力:
BaseClass コンストラクター内
BaseClass コンストラクター内
SubClass コンストラクター内
BaseClass コンストラクター内

下位互換性のため、PHP 5 が classconstruct() 関数で見つからない場合親クラスから継承しない場合は、古いスタイルのコンストラクター、つまりクラスと同じ名前の関数を見つけようとします。したがって、互換性の問題が発生するのは、クラスに既にconstruct()という名前のメソッドがあり、それが他の目的に使用されている場合だけです。

他のメソッドとは異なり、親クラスのconstruct()とは異なるパラメータを持つメソッドによってconstruct()がオーバーライドされた場合、PHPはE_STRICTエラーメッセージを生成しません。

PHP 5.3.3 以降、名前空間 では、クラス名と同じ名前のメソッドはコンストラクターとして使用されなくなりました。この変更は、名前空間にないクラスには影響しません。

例#2 名前空間クラスのコンストラクター

<?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

void destruct(void)

PHP 5 では、C++ などの他の オブジェクト指向 言語と同様のデストラクターの概念が導入されました。デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。

Example#3 デストラクターの例

<?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() を呼び出すと、残りのシャットダウン操作が中止されます。

注:
デストラクターは、すべての HTTP ヘッダーが送信された後、スクリプトが閉じられるときに呼び出されます。スクリプトを閉じたときの作業ディレクトリは、SAPI (Apache など) 内にあるときとは異なる可能性があります。
注意:
デストラクター (スクリプトの終了時に呼び出される) で例外をスローしようとすると、致命的なエラーが発生します。

以上がPHP:コンストラクタとデストラクタのインスタンスの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。