Menu
Coddy logo textTech

管理者インターフェース

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

challenge icon

チャレンジ

簡単

管理機能を追加して、図書館管理システムを拡張しましょう。Userを継承し、図書館の在庫を管理する(新しい本の追加や既存の本の削除)特別な権限を持つAdminクラスを作成します。

コードは5つのファイルに分けて構成します:

  • Book.php — 読み取り専用プロパティ(isbntitleauthor)、初期値がtrueのプライベートな$isAvailableプロパティ、およびメソッド:isAvailable()markAsBorrowed()markAsReturned()を持つBookクラスです。
  • User.php — Bookファイルをインクルードします。読み取り専用プロパティ(idname)、プライベートな$borrowedBooks配列、値が3MAX_BOOKS定数、およびメソッド:getBorrowedBooks()canBorrow()addBook(Book $book)removeBook(string $isbn)を持つUserクラスです。
  • Library.php — Userファイルをインクルードします。addBook()findBook()borrowBook()returnBook()、および検索メソッドを含む既存の機能を持つLibraryクラスです。新しいメソッドを追加してください:
    • removeBook(string $isbn): voidunset()を使用してコレクションから本を削除します。
  • Admin.php — Libraryファイルをインクルードします。Userを継承するAdminクラスを作成します。管理者はユーザーのすべての機能を継承しますが、2つの管理用メソッドが追加されます:
    • addBookToLibrary(Library $library, Book $book): string — 図書館に本を追加し、"Added: [title]"を返します。
    • removeBookFromLibrary(Library $library, string $isbn): string — 以下のチェックを行いながら本の削除を試みます:
      • 本が存在しない場合は、"Book not found"を返します。
      • 本が現在貸出中の場合は、"Cannot remove: book is currently borrowed"を返します。
      • それ以外の場合は、本を削除して"Removed: [title]"を返します。
  • main.php — Adminファイルをインクルードします。ISBNと本のタイトルの2つの入力を受け取ります。

    Libraryを作成し、IDが1、名前が"AdminUser"Adminを作成します。また、IDが2、名前が"RegularUser"の通常のUserを作成します。

    提供されたISBN、タイトル、および著者名"Test Author"を使用してBookを作成します。以下の操作を実行し、各結果を新しい行に出力してください:

    1. 管理者が本を図書館に追加する
    2. 一般ユーザーがその本を借りる
    3. 管理者がその本の削除を試みる(貸出中のため失敗するはずです)
    4. 一般ユーザーがその本を返却する
    5. 管理者がその本を削除する(今度は成功するはずです)
    6. 管理者が同じ本を再度削除しようとする(見つからないため失敗するはずです)

このチャレンジは、継承がいかにして自然な階層構造(管理者は追加の特権を持つユーザーである)を作成するかを示しています。removeBookFromLibraryにおける安全チェックは、流通している本の削除を防ぐことでデータの整合性を保証します。

自分で試してみよう

<?php
require_once 'Admin.php';

// 入力を読み込む
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Library(図書館)を作成する

// TODO: IDが1、名前が "AdminUser" の Admin(管理者)を作成する

// TODO: IDが2、名前が "RegularUser" の一般 User(ユーザー)を作成する

// TODO: 提供されたISBN、タイトル、および著者名 "Test Author" で Book(本)を作成する

// TODO: 以下の操作を実行し、各結果を新しい行に出力する:
// 1. 管理者が本を図書館に追加する
// 2. 一般ユーザーが本を借りる
// 3. 管理者が本の削除を試みる(貸出中のため失敗するはず)
// 4. 一般ユーザーが本を返却する
// 5. 管理者が本を削除する(今度は成功するはず)
// 6. 管理者が同じ本の削除を再度試みる(見つからないため失敗するはず)

?>

オブジェクト指向プログラミングのすべてのレッスン