Menu
Coddy logo textTech

管理者インターフェース

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

challenge icon

チャレンジ

簡単

Library Management System を拡張して、administrative capabilities を追加しましょう。Userを継承するAdmin class を作成します。ただし、library の inventory を管理する特別な権限、つまり新しい books の追加と既存の books の削除が与えられます。

コードを5つのファイルに整理します。

  • Book.php: readonly properties(isbntitleauthor)を持つBook class、初期値がtrueの private $isAvailable property、および次の methods:isAvailable()markAsBorrowed()markAsReturned()
  • User.php: Book file をインクルードします。readonly properties(idname)、private $borrowedBooks array、3MAX_BOOKS constant、および次の methods を持つUser class:getBorrowedBooks()canBorrow()addBook(Book $book)removeBook(string $isbn)
  • Library.php: User file をインクルードします。addBook()findBook()borrowBook()returnBook()、および search methods を含む既存の functionality を備えたLibrary class を作成します。新しい method を追加します。
    • removeBook(string $isbn): void: unset()を使用して collection から book を削除します
  • Admin.php: Library file をインクルードします。UserをextendsするAdmin class を作成します。Admins はすべての user capabilities を継承しますが、次の2つの administrative methods が追加されます。
    • addBookToLibrary(Library $library, Book $book): string: book を library に追加し、"Added: [title]"を返します
    • removeBookFromLibrary(Library $library, string $isbn): string: 次の checks を行って book の削除を試みます。
      • book が exist しない場合は、"Book not found"を返します
      • book が currently borrowed の場合は、"Cannot remove: book is currently borrowed"を返します
      • それ以外の場合は book を削除し、"Removed: [title]"を返します
  • main.php: Admin file をインクルードします。2つの入力、ISBN と book title を受け取ります。

    Libraryと、ID 1、name "AdminUser"Adminを Create します。また、ID 2、name "RegularUser"の通常のUserも Create します。

    指定された ISBN、title、および author "Test Author"を持つBookを Create します。次の operations を実行し、それぞれの結果を新しい行に print します。

    1. admin に book を library に追加させる
    2. 通常の user に book を borrow させる
    3. admin に book の削除を試みさせる(失敗する必要があります:borrowed のため)
    4. 通常の user に book を return させる
    5. admin に book を削除させる(今回は succeed する必要があります)
    6. admin に同じ book の削除をもう一度試みさせる(失敗する必要があります。found できません)

この challenge は、inheritance によって自然な hierarchy がどのように作られるかを示しています。admins は追加の privileges を持つ users です。removeBookFromLibraryの safety checks により、まだ circulation 中の books の削除を防ぎ、data integrity を確保できます。

自分で試してみよう

<?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. admin に book を library に追加させる
// 2. 通常の user に book を借りさせる
// 3. admin に book の削除を試みさせる(失敗するはず - 借りられている)
// 4. 通常の user に book を返却させる
// 5. admin に book を削除させる(今度は成功するはず)
// 6. admin に同じ book の削除を再度試みさせる(失敗するはず - 見つからない)

?>

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

自分で練習してみよう: PHPオンラインコンパイラ