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