관리자 인터페이스
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 86번째.
챌린지
쉬움관리 기능을 추가하여 Library Management System을 확장해 보겠습니다. Admin class를 만들어 User에서 상속받도록 하되, library의 inventory를 관리할 수 있는 특별한 권한을 부여합니다. 여기에는 새 books를 추가하고 기존 books를 제거하는 기능이 포함됩니다.
코드를 다섯 개의 파일로 구성합니다:
Book.php: readonly properties (isbn,title,author)를 가진Bookclass입니다.true로 시작하는 private$isAvailableproperty와 다음 methods를 포함합니다:isAvailable(),markAsBorrowed(),markAsReturned().User.php: Book file을 포함합니다. readonly properties (id,name)를 가진Userclass, private$borrowedBooksarray,3인MAX_BOOKSconstant, 그리고 다음 methods를 포함합니다:getBorrowedBooks(),canBorrow(),addBook(Book $book),removeBook(string $isbn).Library.php: User file을 포함합니다.addBook(),findBook(),borrowBook(),returnBook()및 search methods를 포함한 기존 기능을 갖춘Libraryclass입니다. 다음 새 method를 추가합니다:removeBook(string $isbn): void:unset()을 사용하여 collection에서 book을 제거합니다
Admin.php: Library file을 포함합니다.User를 extends하는Adminclass를 만듭니다. Admins는 모든 user capabilities를 상속하지만 다음 두 가지 administrative methods를 추가로 갖습니다:addBookToLibrary(Library $library, Book $book): string: book을 library에 추가하고"Added: [title]"을 반환합니다removeBookFromLibrary(Library $library, string $isbn): string: 다음 checks를 수행하여 book 제거를 시도합니다:- book이 존재하지 않으면
"Book not found"를 반환합니다 - book이 currently borrowed 상태이면
"Cannot remove: book is currently borrowed"를 반환합니다 - 그렇지 않으면 book을 제거하고
"Removed: [title]"을 반환합니다
- book이 존재하지 않으면
main.php: Admin file을 포함합니다. ISBN과 book title이라는 두 개의 입력을 받습니다.ID가
1이고 name이"AdminUser"인Library와Admin을 만듭니다. 또한 ID가2이고 name이"RegularUser"인 일반User도 만듭니다.제공된 ISBN, title, 그리고 author
"Test Author"를 사용하여Book을 만듭니다. 다음 operations를 수행하고 각 result를 새 줄에 출력합니다:- admin이 library에 book을 추가하도록 합니다
- 일반 user가 book을 borrow하도록 합니다
- admin이 book을 제거하려고 시도하도록 합니다 (borrowed 상태이므로 fail해야 합니다)
- 일반 user가 book을 return하도록 합니다
- admin이 book을 제거하도록 합니다 (이제 성공해야 합니다)
- admin이 같은 book을 다시 제거하려고 시도하도록 합니다 (찾을 수 없으므로 fail해야 합니다)
이 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, title, 저자 "Test Author"로 Book 생성
// TODO: 다음 작업을 수행하고 각 결과를 새 줄에 출력하세요:
// 1. admin이 book을 library에 추가하게 하기
// 2. 일반 user가 book을 대출하게 하기
// 3. admin이 book을 제거하려고 시도하기 (실패해야 함 - 대출 중임)
// 4. 일반 user가 book을 반납하게 하기
// 5. admin이 book을 제거하기 (이제 성공해야 함)
// 6. admin이 같은 book을 다시 제거하려고 시도하기 (실패해야 함 - 찾을 수 없음)
?>객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러