概要

インターフェース (interface) は 「このメソッドを実装してほしい」という契約だけを並べたもの で、interface Printable { public function print(): void; } のように書く。中身は持たず、メソッドの 名前と引数と戻り値型 だけを宣言する場所になる。クラス側で class Book implements Printable と書いて、そのクラスが「Printable の契約を守る」と宣言し、契約に書かれたメソッドをすべて実装することで初めてコンパイルが通る。

抽象クラスとの最大の違いは 多重実装ができる こと。PHP では extends で親クラスは 1 つしか持てないが、implementsimplements A, B, C のように複数並べられる。「印刷できる」「シリアライズできる」「並び替えできる」のような複数の能力を 1 つのクラスに持たせたいとき、それぞれをインターフェースとして切っておけば自由に組み合わせられる。

設計上の意義は 「実装ではなく契約に依存する」 こと。ある関数が「Printable を受け取る」と書かれていれば、Book でも Magazine でも Receipt でも、Printable を実装していれば何でも渡せる。後から新しいクラスを追加するときも、既存のコードを変更せずに implements Printable を付けるだけで組み込める。これがフレームワークの拡張点が決まる仕組みの根幹になる。

学習目標

ドリル

no 内容
01 interface PrintableBookimplements し、print() を実装する

演習: ドリル 01 — Printable を Book で実装する

問題

Printable インターフェイスを定義してください。

Printable を実装する Book クラスを定義してください。

Book のインスタンスを作って title"PHP 入門" を入れ、output() を呼んでください。

期待される出力:

本のタイトル: PHP 入門

ヒント

この章を AI に聞く

  1. 「ch05 — インターフェイス (interface / implements)」のつまずきやすいポイントを、初学者向けに3つ教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

  2. 「ch05 — インターフェイス (interface / implements)」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    💬 ChatGPT 📘 Claude ✨ Gemini

  3. 「ch05 — インターフェイス (interface / implements)」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    💬 ChatGPT 📘 Claude ✨ Gemini

🎉 受講お疲れさまでした!

ch05 — インターフェイス (interface / implements)」を読み終えました。
学んだことを誰かに教えると、もっと記憶に残ります。

X で共有 Hatena LINE