はじめに

継承関係にある2つのクラスにおいて、サブクラスのコンストラクタからスーパークラスのコンストラクタの引数を明示的に指定して呼び出す方法について説明します。

このページはPHPでの実現方法について説明しています、C++での実現方法についてはこちらを、Javaでの実現方法についてはこちらをご参照ください。

サブクラスのコンストラクタ宣言

サブクラスのインスタンス生成時に利用するスーパークラスのコンストラクタを指定するには、サブクラスの各コンストラクタ宣言の後ろにスーパークラスのコンストラクタを下記のように指定して呼び出します。

サンプルコード
<?php

class Super
{
    public function __construct($aNumber)
    {
        print "Superのコンストラクタが呼ばれました。\n";

        if($aNumber!=0)
        {
            print "引数は".$aNumber."です。\n";
        }
    }
}

class Sub extends Super
{
    public function __construct($aNumber)
    {
        parent::__construct($aNumber);

        print "Subのコンストラクタが呼ばれました。\n";

        if($aNumber!=0)
        {
            print "引数は".$aNumber."です。\n";
        }
    }
}

$tInstance1=new Sub();
$tInstance2=new Sub(10);

?>

このプログラムをコンパイル/実行した結果は、下記の通りです。

実行結果
Superのコンストラクタが呼ばれました。
Subのコンストラクタが呼ばれました。
Superのコンストラクタが呼ばれました。
引数は10です。
Subのコンストラクタが呼ばれました。
引数は10です。

サブクラスのコンストラクタに引数として渡された値が、スーパークラスのコンストラクタの引数として、正しく渡されていることがご確認頂けると思います。

PHPのコンストラクタを利用する上での注意点

JavaやC++と違い、PHPではサブクラスのコンストラクタ内でスーパークラスのコンストラクタを明示的に呼ばない限り、サブクラスのインスタンスを生成してもスーパークラスのコンストラクタが呼ばれません。

このため、JavaやC++のプログラムを移植する際には、サブクラス側のコンストラクタ内で明示的にスーパークラスのコンストラクタを呼ぶようにプログラミングしてください。


あなたの探し物は見つかりましたか?
まさにこれだ
参考になった
ちょっと違う
これじゃない

何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まさにこれだ
9 (90%)
参考になった
1 (10%)

表示できるメッセージはありません。