オーバーライド(親クラスの上書き)

オーバーライドとは、継承クラスにおいて、親クラスのメソッドを上書きすること。
親クラスのメソッドに追加機能を持たせたい場合、または親クラスのメソッドの機能を殺したい場合などに使用する。

何か特別な記述をするわけではなく、継承クラスに
親クラスに存在するメソッドと同じ名前のメソッドを作るだけ。

<?php
/************************************
クラスの定義
************************************/
class Product{
    // プロパティの定義(価格を変数に)
    protected $price;

    // メソッドの定義(価格の設定)
    public function setPrice($price){
        $this->price = $price;
    }
}


/************************************
継承クラスの定義
************************************/
class FoodProduct extends Product{
    // プロパティの定義(賞味期限を15に固定で)
    private $expire = 15;

    // メソッドの定義(賞味期限を取得)
    public function getExpire(){
        return $this->expire; // 15を返す
    }

    // メソッドの定義(賞味期限を1ずつ減らして賞味期限を取得)
    public function decrementExpire(){
        $this->expire--;
        return $this->getExpire();
    }

    // メソッドの定義(親クラスの$priceを上書きして再取得 = オーバーライド)
    public function getPrice(){
        $price = $this->price;

            if($this->expire <= 10){
                $price = $price / 2;
            }
        return $price;
    }
}


/************************************
インスタンスの生成
************************************/
$prd = new FoodProduct();


/***********************************
オブジェクトの操作
***********************************/
$prd->setPrice(100); // 価格の設定
$expire = $prd->getExpire(); // 賞味期限の取得(15日)

while($expire > 0){
    $expire = $prd->decrementExpire(); // $expireを1ずつ減らす
    echo "賞味期限:".$expire."日 価格:".$prd->getPrice()."円";
}

?>
賞味期限:14日 価格:100円
賞味期限:13日 価格:100円
賞味期限:12日 価格:100円
賞味期限:11日 価格:100円
賞味期限:10日 価格:50円
賞味期限:9日 価格:50円
賞味期限:8日 価格:50円
賞味期限:7日 価格:50円
賞味期限:6日 価格:50円
賞味期限:5日 価格:50円
賞味期限:4日 価格:50円
賞味期限:3日 価格:50円
賞味期限:2日 価格:50円
賞味期限:1日 価格:50円
賞味期限:0日 価格:50円

インデックスページに戻る