インターフェースの実装
interfaceで契約を定義し、複数のクラスで実装します
「インターフェースの実装」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
はじめに:PHPのインターフェース
インターフェースは、実装するクラスが提供しなければならないメソッドシグネチャの一覧である契約を定義します。抽象クラスとは異なり、1つのクラスで複数のインターフェースを実装できます。
重要な概念
重要な概念:
interface Name {}で宣言します- メソッドには本体がなく、シグネチャだけがあります
implements InterfaceNameで実装します- 1つのクラスで複数のインターフェースを実装できます
インターフェースの定義
例:
<?php
interface Serializable {
public function serialize(): string;
public function unserialize(string $data): void;
}
interface Loggable {
public function toLog(): string;
}
// Implementing both interfaces:
class Event implements Serializable, Loggable {
public function __construct(private string $type, private string $data) {}
public function serialize(): string { return json_encode(['type'=>$this->type,'data'=>$this->data]); }
public function unserialize(string $d): void { $a = json_decode($d,true); $this->type=$a['type']; $this->data=$a['data']; }
public function toLog(): string { return "[{$this->type}] {$this->data}"; }
}型としてのインターフェース
続き:
<?php
interface Cache {
public function get(string $key): mixed;
public function set(string $key, mixed $val, int $ttl = 0): void;
public function delete(string $key): void;
}
// Function accepts any Cache implementation:
function loadUser(int $id, Cache $cache): array {
$key = "user:$id";
$user = $cache->get($key);
if (!$user) {
$user = fetchFromDb($id);
$cache->set($key, $user, 3600);
}
return $user;
}インターフェース定数
さらに詳しく:
<?php
interface HttpMethods {
const GET = 'GET';
const POST = 'POST';
const PUT = 'PUT';
const DELETE = 'DELETE';
}
class Router implements HttpMethods {
public function addRoute(string $method, string $path, callable $handler): void {
// ...
}
}
$router = new Router();
$router->addRoute(HttpMethods::GET, '/users', fn() => []);インターフェースの拡張
実践的な使い方:
<?php
interface Readable {
public function read(): string;
}
interface Writable {
public function write(string $data): void;
}
// Interface can extend multiple interfaces:
interface ReadWrite extends Readable, Writable {
public function seek(int $position): void;
}
class FileStream implements ReadWrite {
public function read(): string { return ''; }
public function write(string $d): void { }
public function seek(int $p): void { }
}インターフェースを使った依存性注入
応用:
<?php
interface MailerInterface {
public function send(string $to, string $subject, string $body): bool;
}
class SmtpMailer implements MailerInterface {
public function send(string $to, string $subject, string $body): bool {
// real SMTP send
return true;
}
}
class UserService {
public function __construct(private MailerInterface $mailer) {}
public function register(string $email): void {
// save user...
$this->mailer->send($email, 'Welcome!', 'Thanks for joining.');
}
}パターン
PHPのインターフェースでは、繰り返し現れる設計上の問題をきれいに解決するため、一般的なパターンが使用されます。読みやすく保守しやすいコードになるよう、一貫して適用してください。
使用する場面
PHPのインターフェースをいつ適用するかを知ることは、適用方法を知ることと同じくらい重要です。過剰に使用すると複雑になり、使用しなさすぎるとコードが重複します。
実際の使用例
実際のアプリケーションでは、PHPのインターフェースはフレームワーク、ORM、サービス層で頻繁に登場します。インターフェースを理解することで、プロフェッショナルなPHPプロジェクトに貢献するための準備が整います。
よくある落とし穴
PHPのインターフェースでは、次のような間違いを避けてください:
- クラスは複数のインターフェースを実装できますが、拡張できるクラスは1つだけです
- インターフェースにはプロパティやメソッド本体を定義できません(PHP 8のデフォルト実装を除きます)
- 実装ではなく、インターフェース(抽象型)を基準にプログラミングします
- 依存性注入やテストでのモック化を可能にするため、インターフェースを使用します
クイックチェック
PHPのクラスは、一度にいくつのインターフェースを実装できますか?
復習:PHPのインターフェース
まとめ:
- クラスは複数のインターフェースを実装できますが、拡張できるクラスは1つだけです
- インターフェースにはプロパティやメソッド本体を定義できません(PHP 8のデフォルト実装を除きます)
- 実装ではなく、インターフェース(抽象型)を基準にプログラミングします
- 依存性注入やテストでのモック化を可能にするため、インターフェースを使用します
よくある質問
「インターフェースの実装」レッスンは無料ですか?
はい。「インターフェースの実装」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「インターフェースの実装」で何を学びますか?
interfaceで契約を定義し、複数のクラスで実装します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「インターフェースの実装」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 継承によるクラスの拡張
- 抽象クラスと抽象メソッド
- インターフェースの実装
- コード再利用のためのトレイト