概要
インターフェース (interface) は 「このメソッドを実装してほしい」という契約だけを並べたもの で、interface Printable { public function print(): void; } のように書く。中身は持たず、メソッドの 名前と引数と戻り値型 だけを宣言する場所になる。クラス側で class Book implements Printable と書いて、そのクラスが「Printable の契約を守る」と宣言し、契約に書かれたメソッドをすべて実装することで初めてコンパイルが通る。
抽象クラスとの最大の違いは 多重実装ができる こと。PHP では extends で親クラスは 1 つしか持てないが、implements は implements A, B, C のように複数並べられる。「印刷できる」「シリアライズできる」「並び替えできる」のような複数の能力を 1 つのクラスに持たせたいとき、それぞれをインターフェースとして切っておけば自由に組み合わせられる。
設計上の意義は 「実装ではなく契約に依存する」 こと。ある関数が「Printable を受け取る」と書かれていれば、Book でも Magazine でも Receipt でも、Printable を実装していれば何でも渡せる。後から新しいクラスを追加するときも、既存のコードを変更せずに implements Printable を付けるだけで組み込める。これがフレームワークの拡張点が決まる仕組みの根幹になる。
学習目標
interfaceは「メソッドの一覧 (契約)」だけを定義するimplementsで「この契約を守る」と宣言できる- 継承 (
extends) と違って 複数のインターフェイスを実装 できる
ドリル
| no | 内容 |
|---|---|
| 01 | interface Printable を Book で implements し、print() を実装する |
📝 演習: ドリル 01 — Printable を Book で実装する
問題
Printable インターフェイスを定義してください。
- メソッド宣言:
public function output(): void;(中身は書かない)
Printable を実装する Book クラスを定義してください。
- プロパティ
title(string) output()は"本のタイトル: {title}"を 1 行出力する
Book のインスタンスを作って title に "PHP 入門" を入れ、output() を呼んでください。
期待される出力:
本のタイトル: PHP 入門ヒント
interface Printable { public function output(): void; }class Book implements Printable { ... }output()の中身はclass側で書く
🤖 この章を AI に聞く
-
「ch05 — インターフェイス (interface / implements)」のつまずきやすいポイントを、初学者向けに3つ教えてください
-
「ch05 — インターフェイス (interface / implements)」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)
-
「ch05 — インターフェイス (interface / implements)」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください