クラスの継承

継承とは、既に存在するあるクラスを元に、それを更に拡張したクラスを作る仕組み。
クラス名の後に「extends 継承元のクラス名」を付け加える。

継承してクラスを作ると、そのクラスは継承元のクラスのメンバを全て引き継ぐ
ただし、修飾子がprivateのメンバは引き継がれない。 privateはあくまでそのクラス内でのみ参照可能。

代わりにprotectedという修飾子を使う。 protectedはそのクラス、および継承先のクラスでのみ参照可能な事を表す修飾子。
外部からは見えない。継承を想定したクラスでは、非公開メンバは「protected」にする

<?php
/************************************
クラスの定義
************************************/
class Product{
    // プロパティの定義(名前・値段)
    protected $name;
    protected $price;

    // メソッドの定義(引数に名前を入れてインスタンス化)
    public function setName($name){
        $this->name = $name;
    }

    // メソッドの定義(価格の取得)
    public function getPrice(){
        return $this->price;
    }

    // メソッドの定義(価格の設定 引数に数値を入れてインスタンス化)
    public function setPrice($price){
        $this->price = $price;
    }
}


/********************************************
継承クラスの定義(class Productにメソッドを追加)
********************************************/
class FoodProduct extends Product{
    // プロパティの定義(賞味期限)
    private $expire;

    // メソッドの定義(賞味期限の設定 引数に数値を入れてインスタンス化)
    public function setExpire($expire){
        $this->expire = $expire;
    }

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

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

$food->setPrice(100);
$food->setExpire(30);

/************************************
表示
************************************/
echo "肉の値段は「".$food->getPrice()."」円です。賞味期限は「".
$food->getExpire()."」日です。";

?>
肉の値段は「100」円です。
賞味期限は「30」日です。

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