クラスのインターフェイス
<?php
/*
インターフェイス
抽象クラスでは定義したメソッドを必ずしも
継承先のクラスで使う必要はありません。
しかし、インターフェイスは宣言したメソッドは
継承したクラスで必ず使わなくてはいけなくなります。
ex.)
interface iTest1
{
public function test11;
public function test12;
}
interface iTest2
{
public function test21();
public function test22();
}
class clsTest implements iTest1,iTest2
{
public function test11()
{
}
public function test12()
{
}
public function test21()
{
}
public function test22()
{
}
}
またインターフェイスを実装するにあたり「implements」を使います。
*/
//インターフェイス
interface iTest
{
public function getData($price, $num);
}
//インターフェイスを実装したクラス
class clsTest implements iTest
{
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);
}
public function getData($price, $num)
{
return $price * $num + $price * $num * $this->percent * 0.01;
}
}
$cls = new clsTest;
$result = $cls->getResult(100, 5, 0);
print "消費税なし : " . $result . "<br />";
$cls2 = new clsTest;
$result = $cls2->getResult(100, 5, 1);
print "消費税あり : " . $result . "<br />";
/*
このサンプルでは簡易的な消費税計算をしています。
本来であれば商店街の消費税計算であっても端数処理を含めた計算があるので
業務で実装する場合は法律をベースとしたユーザの選択している(すべき)
計算方法に則った処理をしていただくことになります。
計算結果を返すメソッドとしインターフェイス「iTest」では
getDataメソッドを定義しています。
あとは継承の仕組みを使うため「implements」を使いクラスを実装しています。
このサンプルではインターフェイスを実装したclsTestクラス内で
引数として受け取った価格と数量をかけ算した結果を返すようにしています。
ただし、消費税率で消費税計算をした結果も加算した結果を返しています。
クラスをインスタンス化した部分を見てください。
(例)
$result = $cls->getResult(100, 5, 0);
引数は下記の通りです。
第1引数:価格
第2引数:数量
第3引数:消費税を使うか?(0を指定)使わないか?(0以外を指定)
クラスをインタンス化すると消費税で使用するパーセントを__constructで初期化しています。
この例では8としています。
getResultメソッドを実行すると第3引数によりパーセントの分岐処理をしています。
ここで消費税のパーセントを0とすると消費税の計算部分が0となるので
商品価格と数量の乗算結果のみが返るイメージとなります。
また、第3引数が0以外であれば__constructで指定したパーセントの数字を利用した
計算結果が返ります。
また、今回のケースを見たただくとクラスのインスタンス化をクラスを定義した下の方で実行しています。
こうしないとインターフェイスで実装したクラスが認識されないようです。
[エラー例]
$cls = new clsTest;
$result = $cls->getResult(100, 5, 0);
print "消費税なし : " . $result . "<br />";
$cls2 = new clsTest;
$result = $cls2->getResult(100, 5, 1);
print "消費税あり : " . $result . "<br />";
//インターフェイス
interface iTest
{
public function getData($price, $num);
}
//インターフェイスを実装したクラス
class clsTest implements iTest
{
private $percent;
(省略)
[実行結果]
Fatal error: Class 'clsTest' not found in C:\Apache\htdocs\20\php-15-1.php on line 50
[出力結果]
消費税なし : 500
消費税あり : 540
*/
?>
|
|