貸出システム
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 84/91。
チャレンジ
簡単Library class を作成して、Library Management System に命を吹き込みましょう。この中央コーディネーターがすべての borrowing 操作を統括します。book collection を管理し、library が円滑に運営されるためのルールを適用します。
コードを4つのファイルに分けて整理します。
Book.php: 前のレッスンで作成したBookclass。readonly プロパティ(isbn、title、author)、trueとして開始する private$isAvailableプロパティ、および次のメソッドを含めます:isAvailable()、markAsBorrowed()、markAsReturned()。User.php: Book ファイルを読み込みます。readonly プロパティ(id、name)、private$borrowedBooksarray、3のMAX_BOOKSconstant、および次のメソッドを持つUserclass を作成します:getBorrowedBooks()、canBorrow()、addBook(Book $book)、removeBook(string $isbn)。Library.php: User ファイルを読み込みます。book collection を管理するLibraryclass を作成します。library には次の要素が必要です。- ISBN をキーとして book を保存する private
$booksarray addBook(Book $book): void:book を collection に追加するfindBook(string $isbn): ?Book:見つかった book を返し、見つからない場合は null を返すborrowBook(User $user, string $isbn): string:borrowing を検証して処理し、適切なメッセージを返すreturnBook(User $user, string $isbn): string:返却を処理し、book と user の両方の状態を更新する
borrowBookmethod では、3つの conditions を順番に確認し、次の正確なメッセージを返します。"Book not found":book が存在しない場合"Book is not available":すでに借りられている場合"Borrowing limit reached":user が3冊の book を持っている場合"Successfully borrowed: [title]":成功した場合
returnBookmethod では、book が存在しない場合は"Book not found"を、成功した場合は"Successfully returned: [title]"を返します。- ISBN をキーとして book を保存する private
main.php: Library ファイルを読み込みます。ISBN と book title の2つの入力を受け取ります。Library、ID が1で name が"Alice"のUser、そして指定された ISBN と title、および author が"Unknown"のBookを作成します。book を library に追加し、その後、次の操作を実行して各結果を新しい行に出力します。- book を borrow する
- 同じ book をもう一度 borrow しようとする
- book を return する
- もう一度 book を borrow する
この challenge では、Library class が business logic を centralize する方法を示します。conditions を検証し、Book と User の object 間で state changes を調整し、各操作に対して意味のある feedback を返します。
自分で試してみよう
<?php
require_once 'Library.php';
// 入力を読み取る
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Library のインスタンスを作成する
// TODO: ID 1 と名前 "Alice" の User を作成する
// TODO: 提供された ISBN、title、著者 "Unknown" の Book を作成する
// TODO: 本をライブラリに追加する
// TODO: これらの操作を実行し、各結果を新しい行に出力する:
// 1. 本を借りる
// 2. 同じ本をもう一度借りようとする
// 3. 本を返却する
// 4. 本をもう一度借りる
?>オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ