Menu
Coddy logo textTech

書籍クラスとユーザークラス

CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 83/91。

challenge icon

チャレンジ

簡単

BookUser class を作成して、Library Management System の基盤を構築しましょう。これらの中核となるドメインオブジェクトが連携して、library の操作を管理します。

コードを3つのファイルに分けて整理します。

  • Book.php: library の本を追跡する Book class を作成します。book には、constructor promotion によって設定される3つの readonly プロパティ isbntitleauthor を持たせます。true で開始する private $isAvailable プロパティを含めます。次の3つのメソッドを追加します。
    • isAvailable(): bool: availability の状態を返します
    • markAsBorrowed(): void: availability を false に設定します
    • markAsReturned(): void: availability を true に設定します
  • User.php: Book file を読み込み、library のメンバーを表す User class を作成します。user には、constructor promotion による2つの readonly プロパティ、id (int) と name (string) を持たせます。private array $borrowedBooks (initially empty) と、3 に設定した constant MAX_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" になります)。

    指定された値を使って UserBook を作成します。まず 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オンラインコンパイラ