オーバーライドした値を再び親クラスから呼び出す parent::

継承クラスでオーバーライドすると、そちらが優先されるだけで、親クラスのメソッドは存在している。

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

    // プロパティの定義(値引率を固定で)
    protected $discountRate = 0.03;

    // メソッドの定義(値引率を適用した価格を取得)
    public function getPrice(){
        $price = $this->price - ($this->price * $this->discountRate);
        return $price;
    }

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


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

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

    // メソッドの定義(賞味期限を1ずつ減らし再取得)
    public function decrementExpire(){
        $this->expire--;
        return $this->getExpire(); // 15から1引いた値を返す
    }

    // メソッドの定義(親クラスの$priceを上書きして再取得)
    public function getPrice(){
        $price = parent::getPrice();

            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();
    echo "賞味期限:".$expire."日 価格:".$prd->getPrice()."円
"; } ?>
賞味期限:14日 価格:97円
賞味期限:13日 価格:97円
賞味期限:12日 価格:97円
賞味期限:11日 価格:97円
賞味期限:10日 価格:48.5円
賞味期限:9日 価格:48.5円
賞味期限:8日 価格:48.5円
賞味期限:7日 価格:48.5円
賞味期限:6日 価格:48.5円
賞味期限:5日 価格:48.5円
賞味期限:4日 価格:48.5円
賞味期限:3日 価格:48.5円
賞味期限:2日 価格:48.5円
賞味期限:1日 価格:48.5円
賞味期限:0日 価格:48.5円

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