注意 |
|
コンストラクタは、
new
によりクラスの新しいインス タンスを作成する際に自動的にコールされるクラス関数です。 PHP
3では、ある関数が、クラス名と同じ名前を有している場合にコンス トラクタになりました。PHP
4では、ある関数が、そのコンストラクタが 定義されているクラスと同じ名前を有している場合にコンストラクタにな
ります。これらの違いは僅かですが、重要な違いがあります。(以下、参 照)
// PHP 3 および PHP 4で動作します class Auto_Cart extends Cart { function Auto_Cart () { $this- add_item("10", 1); } } |
この例は、Cart にコンストラクタを加えたクラス Auto_Cart を定義しています。
このコンストラクタは、"new" により新しい Auto_Cart が作成される度に
籠に10番の物を一つ保持するように初期化します。コンストラクタは、オ
プションとして引数をとります。これにより、コンストラクタは非常に便
利なものとなります。このクラスをパラメータが指定されない場合でも使
用できるようにするには、コンストラクタに指定する全てのパラメータに デフォルト値を指定して下さい。
// PHP 3 と PHP 4の両方で動作 class Constructor_Cart extends Cart { function Constructor_Cart ($item = "10", $num = 1) { $this- add_item($item, $num); } } // しつこいが、前の例と同じものを買う $default_cart = new Constructor_Cart; // 実際に買うもの篭に入れる... $different_cart = new Constructor_Cart("20", 17); |
@new
のようにコンストラクタで発生するエラーの 出力を抑制するために
@
演算子を使用することが 可能です。
注意 |
|
class A { function A() { echo "Aのコンストラクタです br \n"; } } class B extends A { function C() { "通常の関数 br \n"; } } // PHP 3ではコンストラクタはコールされません $b = new B; |
PHP 3では、上の例でコンストラクタはコールされません。PHP 3の規則で
は、「コンストラクタはクラスと同じ名前を有する関数です。」となりま
す。クラス名はBであり、クラスBの中にはB()という関数がないため、何 もおきません。
これは、PHP 4では、次のような別の規則が導入された修正されました。
あるクラスにコンストラクタがない場合、基底クラスのコンストラクタが ある場合にはコールされます。上の例は、PHP 4では、
'Aのコンストラクタです br 'と出力されます。
class A { function A() { echo "Aのコンストラクタです br \n"; } function B() { echo "クラスAのBという名前の通常の関数 br \n"; echo "Aのコンストラクタではありません br \n"; } } class B extends A { function C() { echo "通常の関数です br \n"; } } // これにより、B() がコンストラクタとしてコールされます。 $b = new B; |
PHP 3では、クラスAの関数 B() は意図されていない場合でも、クラスB
のコンストラクタに突然なってしまいました。PHP 3の規則は次のように
なります。「コンストラクタはクラス名と同じ名前の関数である。」PHP
3は、この関数がクラスBで定義されているかとかその関数が継承されてい るかどうかは考慮しません。
これは、PHP 4では次のように規則が修正されました。「コンストラクタ
は、それが定義されているクラスと同じ名前の関数である」つまり、PHP
4では、クラスBが独自のコンストラクタ関数を持たない場合には、基底ク
ラスのコンストラクタがコールされ、「Aのコンストラクタです br 」 と出力されます。
注意 |
|
注意 PHP 3およびPHP 4には、デストラクタはありません。デストラクタの機 能の多くをシミュレーションするには、代わりに register_shutdown_function() を使用します。
デストラクタは、
unset()
またはスコープから でることにより、オブジェクトが破棄される度に自動的にコールされる関数です。
PHPにはデストラクタはありません。