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 round( pi() * $this->arySize[0] * $this->arySize[0] );
}
}
// 継承クラス:楕円のポリモーフィズム
class Ellipse extends Graphic {
//calcAreaメソッドをオーバライド
public final function calcArea(){
//楕円の面積[S=πab]
return round( pi() * $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";
?>