대출 시스템
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 84번째.
챌린지
쉬움모든 대출 작업을 조율하는 Library 클래스를 생성하여 도서 관리 시스템을 완성해 봅시다. 이 중앙 조정자는 도서 컬렉션을 관리하고 도서관이 원활하게 운영되도록 규칙을 시행합니다.
코드는 네 개의 파일로 구성됩니다:
Book.php— 이전 레슨에서 작성한Book클래스입니다. 읽기 전용 속성(isbn,title,author),true로 시작하는 private$isAvailable속성, 그리고isAvailable(),markAsBorrowed(),markAsReturned()메서드를 포함합니다.User.php— Book 파일을 포함합니다. 읽기 전용 속성(id,name), private$borrowedBooks배열, 값이3인MAX_BOOKS상수, 그리고getBorrowedBooks(),canBorrow(),addBook(Book $book),removeBook(string $isbn)메서드를 포함하는User클래스입니다.Library.php— User 파일을 포함합니다. 도서 컬렉션을 관리하는Library클래스를 생성합니다. 라이브러리에는 다음이 포함되어야 합니다:- ISBN을 키로 하여 도서를 저장하는 private
$books배열 addBook(Book $book): void— 컬렉션에 도서를 추가합니다.findBook(string $isbn): ?Book— 도서를 반환하거나 찾지 못한 경우 null을 반환합니다.borrowBook(User $user, string $isbn): string— 대출 가능 여부를 검증하고 처리하며, 적절한 메시지를 반환합니다.returnBook(User $user, string $isbn): string— 반납을 처리하고 도서와 사용자 상태를 모두 업데이트합니다.
borrowBook메서드는 다음 세 가지 조건을 순서대로 확인하고 정확히 이 메시지들을 반환해야 합니다:"Book not found"— 도서가 존재하지 않는 경우"Book is not available"— 이미 대출 중인 경우"Borrowing limit reached"— 사용자가 이미 3권의 책을 대출한 경우"Successfully borrowed: [title]"— 대출 성공 시
returnBook메서드는 도서가 존재하지 않으면"Book not found"를 반환하고, 성공 시"Successfully returned: [title]"를 반환해야 합니다.- ISBN을 키로 하여 도서를 저장하는 private
main.php— Library 파일을 포함합니다. ISBN과 도서 제목이라는 두 개의 입력을 받습니다.Library인스턴스, ID가1이고 이름이"Alice"인User, 그리고 제공된 ISBN, 제목, 저자"Unknown"을 가진Book을 생성합니다. 도서를 라이브러리에 추가한 후, 다음 작업을 수행하고 각 결과를 새 줄에 출력하세요:- 도서 대출
- 동일한 도서 다시 대출 시도
- 도서 반납
- 도서 다시 한 번 대출
이 챌린지는 Library 클래스가 어떻게 비즈니스 로직을 중앙 집중화하는지 보여줍니다. 조건을 검증하고, Book과 User 객체 간의 상태 변화를 조율하며, 각 작업에 대해 의미 있는 피드백을 반환합니다.
직접 해보기
<?php
require_once 'Library.php';
// 입력 읽기
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Library 인스턴스 생성
// TODO: ID가 1이고 이름이 "Alice"인 User 생성
// TODO: 제공된 ISBN, 제목 및 저자가 "Unknown"인 Book 생성
// TODO: 도서관에 책 추가
// TODO: 다음 작업을 수행하고 각 결과를 새 줄에 출력:
// 1. 책 대출
// 2. 동일한 책을 다시 대출 시도
// 3. 책 반납
// 4. 책을 한 번 더 대출
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션