ch05 8章中 5章目

ch05 — インターフェイス (interface / implements)

スライドで見る

この章を AI と学ぶ

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

    ChatGPT Claude Gemini

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

    ChatGPT Claude Gemini

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

    ChatGPT Claude Gemini

概要

インターフェース (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 を付けるだけで組み込める。これがフレームワークの拡張点が決まる仕組みの根幹になる。

学習目標

  • interface は「メソッドの一覧 (契約)」だけを定義する
  • implements で「この契約を守る」と宣言できる
  • 継承 (extends) と違って 複数のインターフェイスを実装 できる

ドリル

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

解説スライド 全 7 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

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

    Lesson 9 / Chapter 5

  2. 「中身」を持たない「契約」だけのクラス

    <?php
    interface Printable {
        public function output(): void;
    }
    • interfaceメソッドの一覧 だけ
    • 中身 { ... } も、プロパティも書かない
    • 「このメソッドを必ず持っている」という 約束 を定義する
  3. implements で契約を守ると宣言

    <?php
    class Book implements Printable {
        public string $title;
    
        public function output(): void {
            echo "本のタイトル: {$this->title}\n";
        }
    }
    • implements インターフェイス名 で「この契約を守る」と宣言
    • 契約 (output) を実装しないと Fatal error
    • 子は親契約を満たす義務がある
  4. 使い方は普通のメソッド呼び出し

    <?php
    $b = new Book();
    $b->title = "PHP 入門";
    $b->output();

    実行結果:

    本のタイトル: PHP 入門
    • 使う側は「インターフェイスを実装してる」ことしか知らなくて良い
    • 中身がどう書かれているかは気にしない
  5. abstract class とどう違う?

    abstract class interface
    インスタンス化 できない できない
    プロパティ 持てる 持てない (定数は OK)
    メソッドの中身 書ける 書けない
    継承・実装の数 1 つだけ 複数 OK
  6. 1 つのクラスで複数のインターフェイスを実装

    <?php
    interface Printable { public function output(): void; }
    interface Sellable { public function price(): int; }
    
    class Book implements Printable, Sellable {
        public string $title;
        public function output(): void { echo "{$this->title}\n"; }
        public function price(): int { return 1500; }
    }
    • カンマで並べる
    • 「印刷可能」かつ「販売可能」の両方の契約を満たす
  7. このチャプターでできるようになること

    interface でメソッドの契約を定義できる ✅ implements で契約を守ると宣言できる ✅ 1 クラスで複数のインターフェイスを実装できる ✅ abstract class との使い分けを言える

    → ドリルへ

1 / 7
📜 スライドを全部一気に読む(縦表示)

Lesson 9 / Chapter 5


「中身」を持たない「契約」だけのクラス

<?php
interface Printable {
    public function output(): void;
}
  • interfaceメソッドの一覧 だけ
  • 中身 { ... } も、プロパティも書かない
  • 「このメソッドを必ず持っている」という 約束 を定義する

implements で契約を守ると宣言

<?php
class Book implements Printable {
    public string $title;

    public function output(): void {
        echo "本のタイトル: {$this->title}\n";
    }
}
  • implements インターフェイス名 で「この契約を守る」と宣言
  • 契約 (output) を実装しないと Fatal error
  • 子は親契約を満たす義務がある

使い方は普通のメソッド呼び出し

<?php
$b = new Book();
$b->title = "PHP 入門";
$b->output();

実行結果:

本のタイトル: PHP 入門
  • 使う側は「インターフェイスを実装してる」ことしか知らなくて良い
  • 中身がどう書かれているかは気にしない

abstract class とどう違う?

abstract class interface
インスタンス化 できない できない
プロパティ 持てる 持てない (定数は OK)
メソッドの中身 書ける 書けない
継承・実装の数 1 つだけ 複数 OK

1 つのクラスで複数のインターフェイスを実装

<?php
interface Printable { public function output(): void; }
interface Sellable { public function price(): int; }

class Book implements Printable, Sellable {
    public string $title;
    public function output(): void { echo "{$this->title}\n"; }
    public function price(): int { return 1500; }
}
  • カンマで並べる
  • 「印刷可能」かつ「販売可能」の両方の契約を満たす

このチャプターでできるようになること

interface でメソッドの契約を定義できる ✅ implements で契約を守ると宣言できる ✅ 1 クラスで複数のインターフェイスを実装できる ✅ abstract class との使い分けを言える

→ ドリルへ

この章で取り組む 演習問題の流れ (1ステップ)
  1. 01 ドリル 01 — Printable を Book で実装する README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 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 側で書く

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(1問)

  1. ドリル 01 — Printable を Book で実装する

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます