クラスの継承

クラスは継承することができます。「継承」とは文字通り、「元の情報を受け継ぐこと」です。すでに存在するクラスの情報をそのまま使って、さらに拡張して新たなクラスを作ることを「クラスの継承」といいます。

・継承によるクラス作成

前回hitoクラスを作りました。hitoクラスにはnamaeとsintyoのプロパティ、そしてhyozyunというメソッドがありました。

これらをそのまま利用して、さらに別のプロパティとメソッドを追加した新たなクラス、hito2を作ってみることにします。

クラスを継承する場合、次のように記述します。

クラスの継承

書式

class 新たなクラス  extends  継承する元のクラス名{

    プロパティやメソッドの定義

}

たとえば、元となるhitoクラスを継承して新たなhito2クラスを作るときは次のようになります。

class hito2 extends hito{

....

}

新たなクラスhito2は、次のプロパティを追加することにします。

public $taizyu;

これはkg単位の体重用のプロパティです。

そしてさらにBMI値を計算するメソッドbmiを追加します。

function bmi(){
   $s2 = $this->sintyo/100;

   return $this->taizyu/($s2*$s2);

}

BMI値=体重(kg)÷(身長(m)✕身長(m))」で計算できます。

「$this->sintyo」はhitoクラスのプロパティなので、拡張したhito2クラスでもそのまま使えます。これ($this->sintyo)を100で割ったm単位の身長を$s2に代入。

体重($this->taizyu)をm単位の身長($s2)の二乗で割ってBMIを返すメソッドです。

ついでにもう一つBMI値から肥満度のメッセージを表示するメソッドhimanも追加します。

function himan(){
   $b = $this->bmi();

   if ($b>= 40){

      print"肥満度4";

   }elseif ($b>=35){

      print"肥満度3";

   }elseif($b>=30){

      print"肥満度2";

   }elseif($b>=25){

      print"肥満度1";

   }elseif($b>=18.5){

      print"普通体重";

   }else{

      print"低体重";

   }

}

先程説明した、BMI値を返すメソッドbmi()の値($this->bmi())を変数$bに代入。if文による分岐で、この値($bつまりBMI値)に対応したメッセージが表示されます。

■継承したクラスの利用

では、継承したクラスを利用してみることにしましょう。

hitoクラスを継承したhito2クラスでは、新しく定義したメソッドやプロパティに加え、hitoクラスで定義したメソッドやプロパティも使うことができます。

まず、hito2のオブジェクトを作り、プロパティに値を代入します。

$obj = new hito2();

$obj->namae ="西沢";

$obj->sintyo=175;

$obj->taizyu=80;

そして次を表示します。

標準体重        :$obj->hyozyun();

体重                  :$obj->taizyu;

BMI値               :$obj->bmi();

肥満度の判定   :$obj->himan();

まとめてみると次のようになります。

 

<?php
$obj = new hito2();
$obj->namae = "西沢";
$obj->sintyo=175;
$obj->taizyu=80;

print $obj->namae."さんの健康チェック<br>";
print "標準体重は".$obj->hyozyun()."<br>";
print "体重は".$obj->taizyu."<br>";
print "BMIは".$obj->bmi()."<br>";
print $obj->himan();

//hitoクラスの定義
class hito{
   public $namae;
   public $sintyo;

   function hyozyun(){
      $s = $this->sintyo/100;
      return $s*$s*22;
   }
}

//hito2クラスの定義
class hito2 extends hito{
   public $taizyu;

   function bmi(){
      $s2 = $this->sintyo/100;
      return $this->taizyu/($s2*$s2);
   }

   function himan(){
      $b = $this->bmi();
   if($b>=40){
      print"肥満度4";
   }elseif($b>=35){
       print"肥満度3";
   }elseif($b>=30){
      print"肥満度2";
   }elseif($b>=25){
      print"肥満度1";
   }elseif($b>=18.5){
      print"普通体重";
   }else{
      print"低体重";
   }
   }
}
?>

実行結果

f:id:mkyosuke:20191204153517p:plain

hitoクラスで使用していたプロパティnamaeとsintyo,そしてメソッドhyozyun()を、

hito2クラスでもそのまま利用することができました。