コンストラクタ (クラスとオブジェクト (PHP 4)) - PHPプロ!マニュアル

PHPマニュアル

コンストラクタ

コンストラクタ

コンストラクタは、new によりクラスの新しいインスタンスを作成する際に自動的にコールされるクラス関数です。 ある関数が、クラス名と同じ名前を有している場合にコンストラクタになります。 コンストラクタが存在しない場合、 もし基底クラスのコンストラクタが存在すれば、それがコールされます。

<?php
// 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
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のようにコンストラクタで発生するエラーの 出力を抑制するために@演算子を使用することが 可能です。例:@new

<?php
class A
{
    function 
A()
    {
        echo 
"Aのコンストラクタです<br>\n";
    }

    function 
B()
    {
        echo 
"クラスAのBという名前の通常の関数<br>\n";
        echo 
"Aのコンストラクタではありません<br>\n";
    }
}

class 
extends A
{
}

// これにより、B() がコンストラクタとしてコールされます。
$b = new B;
?>

クラスAの関数 B() は、意図されていない場合でも突然クラスB の コンストラクタになってしまいました。PHP 4 は、この関数が クラスBで定義されているかとかその関数が継承されているかどうかは 考慮しません。

警告

PHP では派生クラスのコンストラクタから基底クラスの コンストラクタを自動的にコールすることはできません。 上流のコンストラクタを適切にコールするように伝播させることは あなたの責任でやるべきことです。

デストラクタは、unset()またはスコープから でることにより、オブジェクトが破棄される度に自動的にコールされる関数です。 PHPにはデストラクタはありません。デストラクタの機能の多くを シミュレーションするには、代わりに register_shutdown_function() を使用します。


PHPマニュアル



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)