【PHP】interfaceとは? – インターフェースでクラスに実装するメソッドを定義する

インターフェース(interface)と呼ばれる仕組みがあります。

クラスで実装する必要があるメソッドを定義し、クラスと合わせて使います。

ここでは初心者向けにインターフェースについて解説します。

★ 目的

  • インターフェースを理解する。
  • インターフェースを使えるようになる。

インターフェースとは

インターフェースはクラスに実装するメソッドを定義したものです。

クラスと合わせて使い、インターフェースをクラスに適用することを「インターフェースを実装する」と呼ぶことがあります。

メリットやデメリット、使用目的を理解しようとすると設計やオブジェクト指向の知識が必要になりますが、先ずはプログラミングでの動作と使い方について習得しましょう。

基本構文

インターフェースを使うには、インターフェースの定義と実装の2つの基本構文を使ってコードを作成します。

インターフェースの定義

// インターフェース
interface インターフェース名 {
    
    // 抽象メソッド
    アクセス修飾子 function メソッド名();
    
}

インターフェースのメソッドは抽象メソッドのみ定義できます。

抽象メソッドの定義はabstractを付ける必要はなく、interfaceの中のメソッドは自動的に抽象メソッドになります。

インターフェースの実装

// インターフェースの実装
class クラス名 implements インターフェース名 {
}

クラスの定義でクラス名に続いて『implements インターフェース名』を記述することでインターフェースを実装するクラスを作ることができます。

サンプルコード

次のサンプルコードで理解を深めましょう。

ソースコード

<?php

// インターフェース
interface Communication {
    
    // プロフィールを出力する
    public function profile();
    
}

// クラス(抽象クラスを継承)
class Person implements Communication {
    
    // 名前
    public $name = 'Watanabe You';
    
    // プロフィールを出力する
    public function profile() {
        echo "名前: ".$this->name."\n";
    }
    
}

$watanabe = new Person();
$watanabe->profile();

?>

実行結果

名前: Watanabe You

Communicationインターフェースを実装し、Personクラスに実装するコードです。

各コードの概要は次の通りです。

行数概要
4行目〜9行目Communicationインターフェースを定義。
12行目〜22行目Personクラス(Communicationインターフェースを実装)を定義。
24行目Personクラスのインスタンスを生成し、$watanabeに代入。
25行目$watanabeのprofileメソッドを呼び出し。

Communicationインターフェースの定義では、抽象メソッドであるprofileメソッドを定義しています。

これにより、Communicationインターフェースを実装したクラスではprofileメソッドを必ず実装する必要があります。

PersonクラスはimplementsでCommunicationインターフェースを適用しており、profileメソッドが実装されています。

profileメソッドを実装しない場合、エラーになるので注意してください。

複数のインターフェース

1つのクラスに対して、複数のインターフェースを適用することができます。

次のサンプルコードをご覧ください。

ソースコード

<?php

// インターフェース
interface Communication {

    // プロフィールを出力する
    public function profile();

}

// インターフェース
interface Calculation {

    // 足し算をする
    public function addition( $x, $y );

}

// クラス(抽象クラスを継承)
class Person implements Communication, Calculation {

    // 名前
    public $name = 'Watanabe You';

    // プロフィールを出力する
    public function profile() {
        echo "名前: ".$this->name."\n";
    }

    // 足し算をする
    public function addition( $x, $y ) {
        $total = $x + $y;
        echo $x." + ".$y." = ".$total."\n";
    }

}

$watanabe = new Person();
$watanabe->profile();
$watanabe->addition(3, 5);

?>

実行結果

名前: Watanabe You
3 + 5 = 8

先ほどのサンプルコードにCalculationインターフェースを追加し、Personクラスに適用しています。

インターフェースを複数適用する場合は、20行目のimplementsのようにインターフェースをカンマ(,)区切りで記述します。

これにより、Personクラスではprofileとadditionの2つのメソッドを実装する必要があります。

まとめ

インターフェースはクラスに実装するメソッドを定義する仕組みです。

インターフェースの理解には設計等の知識も必要になってきますが、先ずはプログラミングでどのような動作をするかを覚えていきましょう。