カテゴリ: PHP 更新日: 2026/04/22

PHPのinterfaceと抽象クラスの違いを初心者向けにやさしく解説!

PHP の インターフェース(interface)と抽象クラスの違い
PHP の インターフェース(interface)と抽象クラスの違い

先生と生徒の会話形式で理解しよう

生徒

「PHPのインターフェースとか抽象クラスって、何が違うんですか?初心者にはややこしく感じます…」

先生

「たしかに最初は混乱しやすいですね。でも、それぞれの特徴をきちんと理解すれば使い分けもできるようになりますよ!」

生徒

「たとえばどんなときにinterfaceを使って、どんなときにabstract classを使えばいいんですか?」

先生

「よし、今日はPHPのinterfaceと抽象クラスの違いを、図やたとえも使いながら、わかりやすく説明していきましょう!」

1. interface(インターフェース)とは?

1. interface(インターフェース)とは?
1. interface(インターフェース)とは?

PHPのinterface(インターフェース)は、一言でいうと「そのクラスが必ず持っていなければならない機能(メソッド)」を約束するための設計書です。

最大の特徴は、インターフェースの中には「具体的な処理(どう動くか)」を一切書かないことです。「どんな名前のメソッドが必要か」というルールだけを定義します。

たとえば、プログラミング未経験の方なら「家電の操作」をイメージしてみましょう。テレビでもエアコンでも、メーカーが違っても「電源を入れる」「電源を切る」という操作(ルール)は共通ですよね。この「共通の操作ルール」がインターフェースにあたります。

以下のサンプルコードは、移動できるもの(Movable)というルールを作った例です。


interface Movable {
    // 「歩く」という機能が必要!というルール
    public function walk();
    
    // 「止まる」という機能が必要!というルール
    public function stop();
}

このように定義しておくことで、このMovableというインターフェースを使うすべてのクラス(人間、ロボット、動物など)に対して、「必ずwalkとstopというメソッドを中身まで含めて作ってくださいね」と強制することができます。

もし、このルールに従ったクラスで「walk」を作り忘れると、PHPが「ルール違反ですよ!」とエラーを出して教えてくれるため、多人数での開発や大規模なプログラムでもミスを防ぐことができるのです。

2. 抽象クラス(abstract class)とは?

2. 抽象クラス(abstract class)とは?
2. 抽象クラス(abstract class)とは?

abstract class(抽象クラス)は、interfaceに似ていますが、ルールだけでなく「中身(処理内容)」も一部書けるのが大きな特徴です。

「この部分は全員同じにして、この部分はそれぞれで作ってね」という感じです。たとえば、全員に共通する「IDを持つ」という機能はここに書きます。


abstract class Animal {
    public $name;

    public function setName($name) {
        $this->name = $name;
    }

    abstract public function speak();
}

このようにabstractを使うと、共通する処理も定義できて便利です。

3. interfaceとabstract classの違いを表で比較

3. interfaceとabstract classの違いを表で比較
3. interfaceとabstract classの違いを表で比較
比較ポイント interface abstract class
処理の中身(実装) 書けない(定義だけ) 一部書ける
プロパティ(変数) 基本的に持てない 持てる
継承の数 複数可 1つだけ
使う場面 ルールだけ決めたいとき 一部共通処理を使いたいとき

4. interfaceの実装(implements)方法

4. interfaceの実装(implements)方法
4. interfaceの実装(implements)方法

interfaceは、implementsキーワードでクラスに取り入れます。ルール通りに、すべてのメソッドを必ず作る必要があります。


interface Printer {
    public function printData();
}

class PDFPrinter implements Printer {
    public function printData() {
        echo "PDFとして印刷します";
    }
}

5. 抽象クラスの継承(extends)方法

5. 抽象クラスの継承(extends)方法
5. 抽象クラスの継承(extends)方法

抽象クラスは、extendsキーワードでクラスに継承します。共通部分はそのまま使えますが、abstractなメソッドは必ず作らないといけません。


abstract class Vehicle {
    abstract public function run();

    public function stop() {
        echo "止まりました";
    }
}

class Car extends Vehicle {
    public function run() {
        echo "車が走ります";
    }
}

6. interfaceとabstract classを両方使う例

6. interfaceとabstract classを両方使う例
6. interfaceとabstract classを両方使う例

実際の開発では、interfaceabstract classを組み合わせることもよくあります。interfaceでルールを決め、abstract classで共通機能を持たせる使い方です。


interface Flyable {
    public function fly();
}

abstract class Bird {
    public function layEggs() {
        echo "卵を産みました";
    }
}

class Eagle extends Bird implements Flyable {
    public function fly() {
        echo "高く飛びます";
    }
}

このように、複数の性質を持たせるときにとても便利です。

7. interfaceとabstract classの使い分けのコツ

7. interfaceとabstract classの使い分けのコツ
7. interfaceとabstract classの使い分けのコツ

初心者が迷いがちな「どっちを使えばいいの?」というポイントについて、簡単な判断基準を紹介します。

  • 「ルールだけ決めたい」→ interface
  • 「共通の機能も持たせたい」→ abstract class

たとえば、いろんな種類のプリンタを作るとき、印刷ルールだけ決めたいならinterface。印刷処理の中で一部を共通にしたいならabstract classを使いましょう。

8. よくある初心者のつまずきポイント

8. よくある初心者のつまずきポイント
8. よくある初心者のつまずきポイント

interfaceとabstract classを使いこなすには、以下のような注意点も押さえておきましょう。

  • interfaceはメソッドの定義だけなので、処理を書いてはいけません
  • abstractクラスの抽象メソッドは、必ず子クラスで作る必要があります
  • 複数のinterfaceを,でつなげて実装できます(例:implements A, B
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHPでセッションを使ってフォーム入力を保持する方法を解説!初心者向けステップバイステップ
New2
PHP
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
New3
PHP
PHPのメール送信でSPF・DKIM認証設定を完全解説!初心者でもわかるメール認証の基本
New4
Python
PythonでAPIのパフォーマンスを向上させる方法!キャッシュ活用を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
PHP
PHPのHTMLメールの作成方法を完全ガイド!初心者でもわかるメール送信の基本
No.6
Java&Spring記事人気No6
Python
Pythonの例外を発生させる方法を完全解説!raise文の使い方を初心者向けにやさしく説明
No.7
Java&Spring記事人気No7
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.8
Java&Spring記事人気No8
Python
Pythonで2次元リストを作成・操作する方法(リストのリスト)