以下の記事で、クラス(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」は子クラスのプロパティとなります。 オーバーライドの結果が出ていると思います。
このことから、子クラスで宣言されたプロパティを使って、親クラスの関数に違った動作を行わせることが出来ると思います。
コメント