カテゴリ: PHP 更新日: 2025/12/22

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

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

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

生徒

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

先生

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

生徒

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

先生

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

-

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

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

PHPのinterface(インターフェース)は、ルールだけを決めるための「設計書」のようなものです。中には処理の中身は書かず、どんな関数(メソッド)が必要なのかだけを定義します。

たとえば、「歩く」「走る」「止まる」などの動作だけ決めて、どのように動くかはそれぞれの人やロボットで違うというイメージです。


interface Movable {
    public function walk();
    public function stop();
}

このように書くことで、「walk」と「stop」というメソッドを必ず作らないといけないというルールができます。

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 のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.3
Java&Spring記事人気No3
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.7
Java&Spring記事人気No7
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-