書籍クラスとユーザークラス
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 83/91。
チャレンジ
簡単Book と User class を作成して、Library Management System の基盤を構築しましょう。これらの中核となるドメインオブジェクトが連携して、library の操作を管理します。
コードを3つのファイルに分けて整理します。
Book.php: library の本を追跡するBookclass を作成します。book には、constructor promotion によって設定される3つの readonly プロパティisbn、title、authorを持たせます。trueで開始する private$isAvailableプロパティを含めます。次の3つのメソッドを追加します。isAvailable(): bool: availability の状態を返しますmarkAsBorrowed(): void: availability を false に設定しますmarkAsReturned(): void: availability を true に設定します
User.php: Book file を読み込み、library のメンバーを表すUserclass を作成します。user には、constructor promotion による2つの readonly プロパティ、id(int) とname(string) を持たせます。private array$borrowedBooks(initially empty) と、3に設定した constantMAX_BOOKSを含めます。次のメソッドを追加します。getBorrowedBooks(): array: borrowed books の array を返しますcanBorrow(): bool: user が MAX_BOOKS 未満の本しか借りていない場合に true を返しますaddBook(Book $book): void: book を borrowed array に追加しますremoveBook(string $isbn): void:array_filterを使用して ISBN によって book を削除します
main.php: User file を読み込み、class を動作させます。4つの inputs、つまり user ID、user name、book ISBN、book title を受け取ります (author は"Unknown"になります)。指定された値を使って
UserとBookを作成します。まず user が initially borrow できるかどうかを出力し、次に user に book を借りさせます (borrowed として mark し、user に追加します)。最後に、book の availability と borrowed books の count を出力します。出力形式:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
encapsulation によって internal state がどのように保護されるかに注目してください。book の availability は専用メソッドを通してのみ変更され、user の borrowed books は制御された access を通して管理されます。この基盤をもとに、次に borrowing system を構築します。
自分で試してみよう
<?php
require_once 'User.php';
// 入力を読み取る
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: 提供された id と name で User オブジェクトを作成する
// TODO: 提供された isbn、title、author で Book オブジェクトを作成する
// TODO: ユーザーが最初に借りられるかどうかを出力する
// Format: "Can borrow: yes" or "Can borrow: no"
// TODO: ユーザーに本を借りさせる:
// - 本を借り済みとしてマークする
// - 本をユーザーの借りた本に追加する
// TODO: 本の利用可否を出力する
// Format: "Book available: yes" or "Book available: no"
// TODO: 借りた本の数を出力する
// Format: "Books borrowed: [count]"
?>オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ