注意 |
PHP 3 と PHP 4 では、コンストラクタの動作は異なります。PHP 4の定 義の方が明らかに好ましいと言えます。 |
コンストラクタは、newによりクラスの新しいインス タンスを作成する際に自動的にコールされるクラス関数です。 PHP 3では、ある関数が、クラス名と同じ名前を有している場合にコンス トラクタになりました。PHP 4では、ある関数が、そのコンストラクタが 定義されているクラスと同じ名前を有している場合にコンストラクタにな ります。これらの違いは僅かですが、重要な違いがあります。(以下、参 照)
<?php |
この例は、Cart にコンストラクタを加えたクラス Auto_Cart を定義しています。 このコンストラクタは、"new" により新しい Auto_Cart が作成される度に 籠に10番の物を一つ保持するように初期化します。コンストラクタは、オ プションとして引数をとります。これにより、コンストラクタは非常に便 利なものとなります。このクラスをパラメータが指定されない場合でも使 用できるようにするには、コンストラクタに指定する全てのパラメータに デフォルト値を指定してください。
<?php |
@newのようにコンストラクタで発生するエラーの 出力を抑制するために@演算子を使用することが 可能です。例:@new
注意 |
PHP 3では、派生クラスとコンストラクタには複数の制約があります。こ れらの制限を理解するために以下の例を注意して御覧ください。 |
class A |
PHP 3では、上の例でコンストラクタはコールされません。PHP 3の規則で は、「コンストラクタはクラスと同じ名前を有する関数です。」となりま す。クラス名はBであり、クラスBの中にはB()という関数がないため、何 もおきません。
PHP 3では、上の例でコンストラクタはコールされません。PHP 3の規則で は、「コンストラクタはクラスと同じ名前を有する関数です。」となりま す。クラス名はBであり、クラスBの中にはB()という関数がないため、何 もおきません。
class A |
PHP 3では、クラスAの関数 B() は意図されていない場合でも、クラスB のコンストラクタに突然なってしまいました。PHP 3の規則は次のように なります。「コンストラクタはクラス名と同じ名前の関数である。」PHP 3は、この関数がクラスBで定義されているかとかその関数が継承されてい るかどうかは考慮しません。
これは、PHP 4では次のように規則が修正されました。「コンストラクタ は、それが定義されているクラスと同じ名前の関数である」つまり、PHP 4では、クラスBが独自のコンストラクタ関数を持たない場合には、基底ク ラスのコンストラクタがコールされ、「Aのコンストラクタです<br>」 と出力されます。
注意 |
PHP 3 および PHP 4のどちらでも派生クラスのコンストラクタから基底 クラスのコンストラクタを自動的にコールすることはできません。 上流のコンストラクタを適切にコールするように伝播させることは あなたの責任でやるべきことです。 |
注意: PHP 3およびPHP 4には、デストラクタはありません。デストラクタの機 能の多くをシミュレーションするには、代わりに register_shutdown_function() を使用します。
デストラクタは、unset()またはスコープから でることにより、オブジェクトが破棄される度に自動的にコールされる関数です。 PHPにはデストラクタはありません。