まとめ:整理されたプロジェクト
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 14/91。
チャレンジ
簡単名前空間、useキーワード、そしてPSR-4オートローディングについて学んだすべてを統合して、適切な名前空間構成を持つ完全なブログアプリケーションを構築しましょう。
実際のPHPアプリケーションがどのようにコードを整理しているかを示す、5つのファイルで構成される構造化されたプロジェクトを作成します。
src/Models/Author.php—Blog\Models名前空間にAuthorクラスを定義します。public $nameプロパティ、名前を受け取って設定するコンストラクタ、そして"Author: [name]"を返すgetBio()メソッドを持たせる必要があります。src/Models/Post.php—Blog\Models名前空間にPostクラスを定義します。public $titleとpublic $authorプロパティ(authorはAuthorオブジェクト)を持たせる必要があります。コンストラクタはタイトルとAuthorオブジェクトを受け取り、両方を設定します。"[title] by [author name]"を返すgetSummary()メソッドを追加してください。src/Services/Publisher.php—Blog\Services名前空間にPublisherクラスを定義します。Postオブジェクトを受け取り、"Published: [post title]"を返すpublish(Post $post)メソッドを持たせる必要があります。Postクラスは別の名前空間にあるため、useキーワードを使用してインポートする必要があります。vendor/autoload.php—Blog\名前空間プレフィックスをsrc/ディレクトリにマッピングする、spl_autoload_registerを使用したPSR-4オートローダーを作成します。この単一のオートローダーが、すべてのクラスの読み込みを自動的に処理します。index.php— エントリポイントです。オートローダーを読み込み(require)、useキーワードを使用してBlog\Models\Author、Blog\Models\Post、Blog\Services\Publisherをインポートします。"Jane Smith"という名前のAuthor、その著者を使用したタイトルが"Getting Started with PHP"のPost、そしてPublisherを作成します。著者のバイオグラフィ、記事のサマリー、および記事を公開した結果を(それぞれ改行して)出力してください。
PublisherサービスがPostモデルに依存していることに注目してください。これは、異なる名前空間にあるクラスが、useステートメントで必要なものをインポートすることで、どのように連携できるかを示しています。
自分で試してみよう
<?php
// オートローダーを読み込む
require_once 'vendor/autoload.php';
// TODO: 'use' ステートメントを使用して必要なクラスをインポートする
// - Blog\Models\Author
// - Blog\Models\Post
// - Blog\Services\Publisher
// TODO: "Jane Smith" という名前の Author を作成する
// TODO: その著者を使用して、タイトルが "Getting Started with PHP" の Post を作成する
// TODO: Publisher を作成する
// TODO: 著者の略歴(bio)を表示する
// TODO: 記事の要約(summary)を表示する
// TODO: 記事を公開した結果を表示する
?>