管理者インターフェース
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 86/91。
チャレンジ
簡単Library Management System を拡張して、administrative capabilities を追加しましょう。Userを継承するAdmin class を作成します。ただし、library の inventory を管理する特別な権限、つまり新しい books の追加と既存の books の削除が与えられます。
コードを5つのファイルに整理します。
Book.php: readonly properties(isbn、title、author)を持つBookclass、初期値がtrueの private$isAvailableproperty、および次の methods:isAvailable()、markAsBorrowed()、markAsReturned()。User.php: Book file をインクルードします。readonly properties(id、name)、private$borrowedBooksarray、3のMAX_BOOKSconstant、および次の methods を持つUserclass:getBorrowedBooks()、canBorrow()、addBook(Book $book)、removeBook(string $isbn)。Library.php: User file をインクルードします。addBook()、findBook()、borrowBook()、returnBook()、および search methods を含む既存の functionality を備えたLibraryclass を作成します。新しい method を追加します。removeBook(string $isbn): void:unset()を使用して collection から book を削除します
Admin.php: Library file をインクルードします。UserをextendsするAdminclass を作成します。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]"を返します
- book が exist しない場合は、
main.php: Admin file をインクルードします。2つの入力、ISBN と book title を受け取ります。Libraryと、ID1、name"AdminUser"のAdminを Create します。また、ID2、name"RegularUser"の通常のUserも Create します。指定された ISBN、title、および author
"Test Author"を持つBookを Create します。次の operations を実行し、それぞれの結果を新しい行に print します。- admin に book を library に追加させる
- 通常の user に book を borrow させる
- admin に book の削除を試みさせる(失敗する必要があります:borrowed のため)
- 通常の user に book を return させる
- admin に book を削除させる(今回は succeed する必要があります)
- 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オンラインコンパイラ