継承とは、既に存在するあるクラスを元に、それを更に拡張したクラスを作る仕組み。
クラス名の後に「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」円です。