クラスの抽象化
<?php
/*
クラスの抽象化
他のクラスで使う準備としてクラスを定義したものが
クラスの抽象化と思ってください。
プログラムで何かの処理を作るとき、こんな感じの
メソッドを作ろうかな?と考えるとします。
その作りたい内容をクラスにしたとき、継承という仕組みを使って
クラスを実装することになります。
*/
$cls = new clsTest;
$result = $cls->getResult(100, 5, 0);
print "消費税なし : " . $result . "<br />";
$cls2 = new clsTest;
$result = $cls2->getResult(100, 5, 1);
print "消費税あり : " . $result . "<br />";
//抽象クラス
abstract class clsGoods
{
abstract protected function getData($price, $num);
}
//抽象クラスを継承したクラス
class clsTest extends clsGoods
{
private $percent;
public function __construct()
{
$this->percent = 8;
//$this->percent = 10;
}
public function getResult($price, $num, $kind)
{
if($kind==0)
{
//ここでは変数の値が0の場合はパーセントを無効にしています
$this->percent = 0;
}
return $this->getData($price, $num);
}
protected function getData($price, $num)
{
return $price * $num + $price * $num * $this->percent * 0.01;
}
}
/*
このサンプルでは簡易的な消費税計算をしています。
本来であれば商店街の消費税計算であっても端数処理を含めた計算があるので
業務で実装する場合は法律をベースとしたユーザの選択している(すべき)
計算方法に則った処理をしていただくことになります。
計算結果を返すメソッドとして抽象化したクラス「clsGoods」では
getDataメソッドを定義しています。
ここでは抽象化を表すために「abstract」をつけること
アクセス修飾子は「public」か「protected」を使用することが
が条件として必要となります。
あとは継承の仕組みを使うため「extends」を使いclsGoodsクラスを継承させて
内部ロジックを実装しています。
このサンプルでは抽象化クラスを継承したclsTestクラス内で
引数として受け取った価格と数量をかけ算した結果を返すようにしています。
ただし、消費税率で消費税計算をした結果も加算した結果を返しています。
クラスをインスタンス化した部分を見てください。
(例)
$result = $cls->getResult(100, 5, 0);
引数は下記の通りです。
第1引数:価格
第2引数:数量
第3引数:消費税を使うか?(0を指定)使わないか?(0以外を指定)
クラスをインタンス化すると消費税で使用するパーセントを__constructで初期化しています。
この例では8としています。
getResultメソッドを実行すると第3引数によりパーセントの分岐処理をしています。
ここで消費税のパーセントを0とすると消費税の計算部分が0となるので
商品価格と数量の乗算結果のみが返るイメージとなります。
また、第3引数が0以外であれば__constructで指定したパーセントの数字を利用した
計算結果が返ります。
[出力結果]
消費税なし : 500
消費税あり : 540
*/
?>
|
|