1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
/* -------------------------------------------------------------------------
 *  クラス・オブジェクト:Classのポリモーフィズム:図形の面積計算の例
 *  2015.10.15 作成 yoshi of CXMedia Inc.
 * ------------------------------------------------------------------------
 */
header("Content-type:text/plain; charset=UTF-8");
/* -------------------
 *   クラスの構成
 * ------------------- */
// スーパークラス:グラフィックの計算
class Graphic {
     
// プロパティ
     
protected $arySize;
     
     
// コンストラクタ:寸法データの設定
     
public function __construct($ary){
        
$this->arySize $ary;
    }
    
// メソッド:中味がないシグニチャのみのcalcArea
    
protected function calcArea(){}
}
// "final"定義で、継承クラス・メソッドのオーバライド禁止
// 継承クラス:円のポリモーフィズム
class Circle extends Graphic {
    
//calcAreaメソッドをオーバライド
    
public final function calcArea(){
        
//円の面積[S=πr x r]]
        
return roundpi() * $this->arySize[0] * $this->arySize[0] );
    }
}
// 継承クラス:楕円のポリモーフィズム
class Ellipse extends Graphic {
    
//calcAreaメソッドをオーバライド
    
public final function calcArea(){
        
//楕円の面積[S=πab]
        
return roundpi() * $this->arySize[0] * $this->arySize[1] );
    }
}
// 継承クラス:矩形のポリモーフィズム
class Rectangle extends Graphic {
    
//calcAreaメソッドをオーバライド
    
public final function calcArea(){
        
//矩形の面積[S=wide x height]
        
return $this->arySize[0] * $this->arySize[1];
    }
}

/* --------------
 *  クラスの利用
 * -------------- */
// 初期寸法データ
$sizeCircle  = array(10);   //円:半径
$sizeEllipse = array(5,8);  //楕円:長辺、短辺
$sizeRectang = array(5,10); //矩形:幅、高さ

// ---インスタンス(オブジェクト)を作成--- //
$objCircle  = new Circle($sizeCircle);
$objEllipse = new Ellipse($sizeEllipse);
$objRectang = new Rectangle($sizeRectang);

// メソッド:面積計算
echo '円の面積は'.$objCircle->calcArea().'です。',"\n";
echo 
'楕円の面積は'.$objEllipse->calcArea().'です。',"\n";
echo 
'矩形の面積は'.$objRectang->calcArea().'です。',"\n";
?>