オーバーライドとは、継承クラスにおいて、親クラスのメソッドを上書きすること。
親クラスのメソッドに追加機能を持たせたい場合、または親クラスのメソッドの機能を殺したい場合などに使用する。
何か特別な記述をするわけではなく、継承クラスに
親クラスに存在するメソッドと同じ名前のメソッドを作るだけ。
<?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円