以下の記事で、クラス(class)の使い方について説明しましたが、その時は親クラスのメソッドを、 子クラスで同じメソッド名で宣言することでオーバーライドができることを記しました。
⇒PHP クラス(class)の使い方について
クラスは関数だけではなく、プロパティ(変数と言ってもいいと思います)もオーバーライドが使えます。
親クラスで public で宣言されたプロパティを、子クラスで同じ名前で public で宣言すればオーバーライドしたことになります。 取敢えず、簡単な例を以下に示します。
<?php // 継承の基となる親クラス class cParent { // プロパティ public $param; // コンストラクタ public function __construct() { $this->param = "cParent_param"; } // テスト関数 public function func() { echo $this->param."
\n"; } } // [cParent]から派生した子クラス class cChild extends cParent { // オーバーライド・プロパティ public $param; // コンストラクタ public function __construct() { $this->param = "cChild_param"; } } // [cParent]クラスの生成 $insParent = new cParent(); // テスト関数の実行 $insParent->func(); // [cChild]クラスの生成 $insChild = new cChild(); // テスト関数の実行 $insChild->func(); ?>
親クラスに「param」のプロパティを宣言し、コンストラクタの中でそのプロパティを初期化しています。 また、関数「func()」の中ではそのプロパティを出力しています。
そこで、この親クラスから派生した子クラスに「param」というプロパティをオーバーライド宣言しています。
これらのクラスを実行してするため、親クラスを生成し「func()」を実行し、子クラスを生成し「func()」を実行しています。
これを実行するとブラウザに以下の様に表示されます。
cParent_param cChild_param
子クラスを生成し「func()」を実行した場合は、親クラスの「func()」が実行され、 「func()」の中で参照されている「param」は子クラスのプロパティとなります。 オーバーライドの結果が出ていると思います。
このことから、子クラスで宣言されたプロパティを使って、親クラスの関数に違った動作を行わせることが出来ると思います。
コメント