abstract -抽象クラス-
抽象クラスとは...
- 通常のクラスと違いインスタンスを生成できません。(エラーが出ます)
- 別のクラスに処理内容を継承(オーバーライド)される必要があります。
- クラス名に"abstract class クラス名{~}"と定義します。
- 抽象クラス内に抽象メソッドとして"abstract アクセス修飾子 function メソッド名()"で定義し、処理内容は記述することはできません。
- 通常のクラスと同じように普通のメソッドやフィールドを記述が出来ます。
抽象クラスの一例
<?php abstract class TimeMeasurer{//抽象クラス:処理時間計測 abstract protected function process(); public function exec(){ $startTime = $this->getMicrotime(); $this->process(); $endTime = $this->getMicrotime(); $proSecs = $endTime - $startTime; echo sprintf("処理所要時間は%s秒でした",$proSecs); } private function getMicrotime(){ $splitedMt = explode(' ',microtime()); return $splitedMt[0] + $splitedMt[1]; } }//end class TimeMeasurer class StrAppendInt extends TimeMeasurer{//文字列+数値 protected function process(){ for($i = 0; $i < 1000000; $i++){ $str = 'あいうえお'; $str .= 1; } } } class StrAppendStr extends TimeMeasurer{//文字列+文字列 protected function process(){ for($i = 0; $i < 1000000; $i++){ $str = 'あいうえお'; $str .= '1'; } } } $test1 = new StrAppendInt(); echo "文字列に数値を結合する"; $test1 -> exec(); echo "<br>"; $test2 = new StrAppendStr(); echo "文字列に文字列を結合する"; $test2 -> exec(); ?>
出力結果
文字列に数値を結合する処理所要時間は0.262101888657秒でした 文字列に文字列を結合する処理所要時間は0.165920972824秒でした
まず、抽象クラスには継承先のクラス内の処理を計測するメソッドを記述します。
継承先の2つのクラスには「文字列と数値を結合する」と「文字列と文字列を結合」する別々のメソッドが記述されております。
出力にもあるとおり、文字列に無理に数値を結合すると、内部で数値を文字列変換する処理時間が増えるので
「文字列+文字列」よりも「文字列+数値」の方が処理時間が増えています。