관리자 인터페이스
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 86번째.
챌린지
쉬움관리 기능을 추가하여 도서 관리 시스템을 확장해 보겠습니다. User를 상속받지만 도서관의 인벤토리를 관리(새 도서 추가 및 기존 도서 삭제)할 수 있는 특별한 권한을 가진 Admin 클래스를 만들 것입니다.
코드는 다음 다섯 개의 파일로 구성됩니다:
Book.php— 읽기 전용 속성(isbn,title,author),true로 시작하는 private$isAvailable속성, 그리고isAvailable(),markAsBorrowed(),markAsReturned()메서드를 가진Book클래스입니다.User.php— Book 파일을 포함합니다. 읽기 전용 속성(id,name), private$borrowedBooks배열, 값이3인MAX_BOOKS상수, 그리고getBorrowedBooks(),canBorrow(),addBook(Book $book),removeBook(string $isbn)메서드를 가진User클래스입니다.Library.php— User 파일을 포함합니다.addBook(),findBook(),borrowBook(),returnBook()및 검색 메서드를 포함한 기존 기능을 가진Library클래스입니다. 다음의 새 메서드를 추가하세요:removeBook(string $isbn): void—unset()을 사용하여 컬렉션에서 도서를 제거합니다.
Admin.php— Library 파일을 포함합니다.User를 확장하는Admin클래스를 만듭니다. 관리자는 모든 사용자 기능을 상속받지만 두 가지 관리 메서드를 추가로 가집니다: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과 도서 제목이라는 두 개의 입력을 받습니다.Library를 생성하고 ID가1이며 이름이"AdminUser"인Admin을 생성합니다. 또한 ID가2이며 이름이"RegularUser"인 일반User를 생성합니다.제공된 ISBN, 제목, 그리고 저자
"Test Author"로Book을 생성합니다. 다음 작업을 수행하고 각 결과를 새 줄에 출력하세요:- 관리자가 도서관에 도서를 추가하도록 합니다.
- 일반 사용자가 도서를 대출하도록 합니다.
- 관리자가 도서 제거를 시도하도록 합니다 (대출 중이므로 실패해야 합니다).
- 일반 사용자가 도서를 반납하도록 합니다.
- 관리자가 도서를 제거하도록 합니다 (이제 성공해야 합니다).
- 관리자가 동일한 도서를 다시 제거하려고 시도합니다 (찾을 수 없으므로 실패해야 합니다).
이 챌린지는 상속이 어떻게 자연스러운 계층 구조를 만드는지 보여줍니다. 관리자는 추가 권한을 가진 사용자입니다. 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. 관리자가 동일한 책을 다시 삭제하려고 시도함 (찾을 수 없으므로 실패해야 함)
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션