カテゴリ: 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でカウントダウンタイマーを作る方法!初心者向けにやさしく解説
New2
PHP
PHPとは?初心者向けにわかりやすく解説
New3
Python
Pythonの数値型を完全ガイド!整数と浮動小数点数の違いを初心者向けに解説
New4
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
-
人気記事
No.1
Java&Spring記事人気No1
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.2
Java&Spring記事人気No2
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.3
Java&Spring記事人気No3
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
Pythonで月の日数を取得する方法!初心者でもわかるcalendar.monthrangeの使い方
No.6
Java&Spring記事人気No6
Python
Pythonの文字列型(str)の使い方!文字列の結合・分割・検索をマスター
No.7
Java&Spring記事人気No7
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.8
Java&Spring記事人気No8
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
-
-