継承関係にある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です。
サブクラスのコンストラクタに引数として渡された値が、スーパークラスのコンストラクタの引数として、正しく渡されていることがご確認頂けると思います。
JavaやC++と違い、PHPではサブクラスのコンストラクタ内でスーパークラスのコンストラクタを明示的に呼ばない限り、サブクラスのインスタンスを生成してもスーパークラスのコンストラクタが呼ばれません。
このため、JavaやC++のプログラムを移植する際には、サブクラス側のコンストラクタ内で明示的にスーパークラスのコンストラクタを呼ぶようにプログラミングしてください。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。