Laravel学習帳

Laravel5.2の学習帳です。開発環境はXAMPP for Windows 5.6.19 / 本番環境はさくらサーバー(スタンダード)

周辺知識

抽象クラスについて

2017/08/24

開発をする上で疎結合(そけつごう)なコードで書くことは重要です。

疎結合とは、細分化された個々のコンポーネント同士の結びつきが比較的緩やかで、独立性が強い状態のことである。
疎結合では、個々のコンポーネント同士は相互に連携しているが、相互に依存している余地が少ない。
出典:IT用語辞典 Weblio辞書

つまり「テストがし易い」ということです。

「疎結合」なコードにするために「抽象化」という考えが大切です。

これはLaravelで開発をする上でも重要です。

PHPによる抽象化は「abstract」と「interface」があります。

今回は「abstract」についてエントリーします。

 

概念

抽象クラスとはインスタンス化ができないクラスのことです。

自身をインスタンス化することができないので、継承をする前提で定義します。

抽象クラスでは通常のメソッドを定義することができます。

宣言だけして、処理の内容を定義しないメソッドは抽象メソッドといいます。

 

抽象クラスの記述方法

抽象クラスとは、他のクラスで継承してもらうことを前提としたクラスです。

なので、抽象クラス自体をインスタンス化することはできません。

abstract 抽象クラス名{
}
「class」の代わりに「abstract」というキーワードを使用します。

 

抽象メソッドの記述方法

抽象メソッドとは、処理内容を持たずに名前だけ定義されたメソッドです。

継承先のクラスで必ずオーバーライドする必要があります。

abstract 抽象クラス名{
  abstract アクセス修飾子 function 抽象メソッド名();
}
抽象メソッドは処理内容を記述することが出来ません。
よって "{ }" が存在しません。

 

継承方法

抽象クラスを継承するときは通常どおり extends を使います。

抽象クラスで抽象メソッドを定義した場合は、派生クラスで必ず処理部を実装(オーバーライド)しなければなりません。

先の通り、抽象メソッドは処理部を備えていない不完全なメソッドだからです。

class クラス名 extends 抽象クラス名{
 public function 抽象メソッド名(){
   処理内容;
 }
}

 

チュートリアル

サンプルコードを書きながら理解を深めていきます。

サンプルの内容はエコーするだけのプログラムを抽象クラスから継承して実装します。

そのあと、インスタンス化してコールします。

今回はLaravelでは作成しません。純粋なPHPでコーディングします。

 

手順

1)抽象クラスと抽象メソッドを定義

2)継承

3)実行

4)動作確認

 

1)抽象クラスと抽象メソッドを定義

まずは demo という抽象クラスを定義します。

続いてその中に func1 と func2 という抽象メソッドを定義します。

<?php
abstract class demo{
  abstract public function func1();
  abstract public function func2();
}
:

 

2)継承

:
class demo2 extends demo{
  public function func1(){
    echo "calling func1 is success !<br>";
  }
  public function func2(){
    echo "calling func2 is success !<br>";
  }
}

 

3)実行

:
$obj = new demo2;
$obj->func1();
$obj->func2();

 

4)動作確認

http://{ホスト名}/abstract_demo.php にアクセス

結果は以下のようになります。

PHPの抽象化(abstract)については以上です。

 

-周辺知識