ORJavaScriptが有効ではありません。コンストラクタとデストラクタコンストラクタとデストラクタデストラクタって・・・何???「コンストラクタ」は“オブジェクトの生成時に自動的にコールされる特殊なメンバ関数”でした。これはPHP4にもありましたが、PHP5になって「デストラクタ」という愉快な仲間が新登場しました。「デストラクタ」は“オブジェクトが消滅する時に自動的にコールされる特殊なメンバ関数”です。PHP5式コンストラクタ/デストラクタPHP4では、クラス名と同じ名前のメンバ関数を定義すると、それが「コンストラクタ」になりました。PHP5でも、互換性のためにPHP4と同様にして「コンストラクタ」をつくれますが、“PHP5式”では「__construct()(アンダーライン2本で始まる)」が「コンストラクタ」となり、また「__destruct()(アンダーライン2本で始まる)」が「デストラクタ」になります。ちなみに、“PHP4式”のコンストラクタと“PHP5式”のコンストラクタの両方が定義されていた場合は、“PHP5式”のコンストラクタがコールされます。PHPでは「__(アンダーライン2本)」で始まるクラスのメンバ関数名と通常の関数名を、“特殊な関数”として予約していて、「__(アンダーライン2本)」で始まる関数名を付けないよう推奨されているので、付けない様にしましょう。“「コンストラクタ」の呼ばれ時”はご存知の通り、“「new演算子」でオブジェクトが生成された時”ですが、では“「デストラクタ」の呼ばれ時”の“オブジェクトが消滅する時”って具体的にどんな時なのか?それは“どの変数からも参照されなくなった時”です。以下のサンプルと結果をご覧下さい。#「die()」でスクリプト終了。~~~~~~「コンストラクタ」と「デストラクタ」の呼ばれ時を追跡してみますと、下記のようになります。」でオブジェクト生成。「コンストラクタ」がコールされる。その後変数に代入される事なく文が終了。オブジェクトが何処からも参照されなくなったので「デストラクタ」がコールされる。HODE(0);」でオブジェクト生成。「HODE(0)」の「コンストラクタ」がコールされる。HODE(4);」でオブジェクト生成。「HODE(1)」の「コンストラクタ」がコールされる。「$hode」が更新され、「HODE(0)」の「デストラクタ」がコールされる。「HODE(2)」、「HODE(3)」、「HODE4」の「コンストラクタ」がコールされる。「unset($hode3);」でアンセット。「HODE(3)」の「デストラクタ」がコールされる。「die()」でスクリプトを終了させる。各変数がアンセットされていき、「HODE(2)」、「HODE(1)」、「HODE4」の「デストラクタ」がコールされる。クラスを継承した場合、派生クラスのオブジェクトを生成・削除しても、基底クラスの「コンストラクタ」と「デストラクタ」は自動的にコールされないので、「parent::__construct()」や「parent::__destruct()」のように手動?でコールします。1サンプルご覧下さい。#未定義のメソッドをコールしてエラーを発生させる。#未定義の関数をコールしてエラーを発生させる。error:その関数、未定義ですから。error:そのメソッド、未定義ですから。発生した時点でスクリプトが終了させられる「E_ERROR」エラーが発生しましたが、ちゃんと「デストラクタ」はコールされました。“「デストラクタ」は何が何でもコールされる”ようです。見ると、「デストラクタ」を持つオブジェクトが3つあり、本来ならオブジェクトの消滅時にこの3つ分の「デストラクタ」がコールされるはずなのに1つ分しかコールされていません。未定義の関数をコールして「E_ERROR」エラーを発生させ、「デストラクタ」がコールされましたが、さらにその「デストラクタ」内で未定義のメソッドをコールして「E_ERROR」エラーを発生させたら、それ以降、別のオブジェクトの「デストラクタ」はコールされませんでした。「die()」による人為的なスクリプトの終了の場合も「E_ERROR」エラー発生による強制終了の場合も、オブジェクトの消滅時には何が何でも「デストラクタ」はコールされますが、“「デストラクタ」内の処理によってスクリプトが終了する場合は、それ以降、別の「デストラクタ」はコールされません”。