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

phpのコンストラクターとデストラクター

伊谢尔伦
伊谢尔伦オリジナル
2016-11-23 14:18:47949ブラウズ

コンストラクター ¶

void__construct ([mixed$args [, $... ]] )

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

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

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

class BaseClass
{
function __construct(){
print "In BaseClass constructor<br>";
}
}
class SubClass extends BaseClass
{
function __construct(){
parent::__construct();
print "In SubClass constructor<br>";
}
}
class OtherSubClass extends BaseClass
{}
$obj = new BaseClass();
$obj = new SubClass();
$obj = new OtherSubClass();

出力結果:

BaseClass コンストラクター内

BaseClass コンストラクター内

SubClass コンストラクター内

BaseClass コンストラクター内

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

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

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

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

namespace Foo;
class Bar{
public function Bar(){
//在PHP5.3.0-5.3.2中被看作是构造函数
//自PHP5.3.3起被视作一个普通的方法
}
}

Destructor ¶

void__destruct ( void )

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

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

<?php
class MyDestructableClass{
function __construct(){
print "In constructor<br>";
$this->name = "MyDestructableClass";
}
function __destruct(){
print "Destroying ".$this->name.&#39;<br>&#39;;
}
}
$obj = new MyDestructableClass();
?>

出力結果:

コンストラクター内

MyDestructableClass の破棄

コンストラクターと同様に、親クラスのデストラクターはエンジンによって秘密裏に呼び出されません。親クラスのデストラクターを実行するには、parent::__destruct() を子クラスのデストラクター本体で明示的に呼び出す必要があります。さらに、コンストラクターと同様に、サブクラスは、デストラクターが定義されていない場合、親クラスを継承します。

exit() を使用してスクリプトを終了する場合でも、デストラクターが呼び出されます。デストラクターで exit() を呼び出すと、残りのシャットダウン操作が中止されます。

注:

デストラクターは、スクリプトが閉じられたとき、つまりすべての HTTP ヘッダーが送信されたときに呼び出されます。スクリプトを閉じたときの作業ディレクトリは、SAPI (Apache など) 内にあるときとは異なる可能性があります。

注:

デストラクター (スクリプトの終了時に呼び出される) で例外をスローしようとすると、致命的なエラーが発生します。


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