カテゴリ: 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
Python
Pythonの変数スコープとは?初心者でもわかるローカル変数とグローバル変数の違い
New2
Python
PythonのNoneとは?NoneTypeの使い方とnullとの違いをわかりやすく解説
New3
Python
Pythonで文字列の長さを取得する方法!len()の基本と応用
New4
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
Python
Pythonでファイルの更新日やサイズを取得する方法!初心者でもわかるos.stat()の使い方
No.3
Java&Spring記事人気No3
PHP
PHPでREST APIを作る方法を完全ガイド!初心者でもわかるAPI開発入門
No.4
Java&Spring記事人気No4
Python
Pythonの書き方を基本から解説!はじめてのPythonプログラム
No.5
Java&Spring記事人気No5
PHP
初心者向けにPHP でファイルを開く・読み込む・書き込む方法(fopen, fwrite, fread)を解説する記事
No.6
Java&Spring記事人気No6
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
No.7
Java&Spring記事人気No7
Python
Pythonのコンストラクタ(__init__)の使い方を解説!初心者でもわかるオブジェクトの初期化
No.8
Java&Spring記事人気No8
Python
Pythonのクラスとは?初心者向けにわかるオブジェクト指向とインスタンス作成の基本
-
-