

PHPに関する質問です。  
以下のコードですが、結果としては、3パーセント割引された商品価格が$priceに入るという結果を期待しているのですが、親クラスのgetPriceメソッドが呼び出されていないようです。  
なぜでしょうか？詳しい方、ご教示ください。  
参考：<http://www.objective-php.net/basic/override>

[code]

    class Product
    {
        protected $price;
        protected $discountRate = 0.03;
    
        public function getPrice()
        {
            $price = $this->price - ($this->price * $this->discountRate);
            return $this->price;
        }
    
        public function setPrice($price)
        {
            $this->price = $price;
        }
    }
    
    class FoodProduct extends Product
    {
        private $expire = 15;
    
        public function getExpire()
        {
            return $this->expire;
        }
    
        public function decrementExpire()
        {
            $this->expire--;
            return $this->getExpire();
        }
    
        public function getPrice()
        {
            $price = parent::getPrice();
    
            if($this->expire <= 10){
                $price = $price / 2;
            }
            return $price;
        }
    }
    
    
    $prd = new FoodProduct();
    
    $prd->setPrice(100);
    
    $expire = $prd->getExpire();
    
    while($expire > 0){
        echo '賞味期限:'.$expire . '日 価格：'.$prd->getPrice().'<br>';
        $expire = $prd->decrementExpire();
    }
    
[/code]


CC BY-SA 3.0
2015-04-19T10:29:16.517
9309
2015-04-19T13:02:44.443
2015-04-19T12:24:12.167
8000
8619
question
php
PHPに関する質問です。（オーバーライド）


ProductクラスのgetPriceメソッドの

[code]

    return $this->price;
    
[/code]

を

[code]

    return $price
    
[/code]

にすれば良いのではないでしょうか。


CC BY-SA 3.0
2015-04-19T11:00:12.273
9311
2015-04-19T11:00:12.273
2232
9309
answer


以下のようにするといいのではないでしょうか？  
※訂正前の内容と、間違えている内容をコード内にコメントで記載しています

[code]

    class Product
    {
        protected $price;
        protected $discountRate = 0.03;
    
        public function getPrice()
        {
            $price = $this->price - ($this->price * $this->discountRate);
            return $price;
            //return $this->price;   //元の価格を戻り値として返しちゃってます
        }
    
        public function setPrice($price)
        {
            $this->price = $price;
        }
    }
    
[/code]


CC BY-SA 3.0
2015-04-19T13:02:44.443
9316
2015-04-19T13:02:44.443
3104
9309
answer