도서 및 사용자 클래스
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 83번째.
챌린지
쉬움Book 클래스와 User 클래스를 생성하여 도서 관리 시스템의 기초를 구축해 보겠습니다. 이 핵심 도메인 객체들은 도서관 운영을 관리하기 위해 함께 작동할 것입니다.
코드는 세 개의 파일로 구성됩니다:
Book.php— 도서관 도서를 추적하는Book클래스를 생성합니다. 도서는 생성자 프로모션(constructor promotion)을 통해 설정되는 세 개의 readonly 속성인isbn,title,author를 가져야 합니다.true로 시작하는 private$isAvailable속성을 포함하세요. 다음 세 가지 메서드를 추가합니다:isAvailable(): bool— 가용성 상태를 반환합니다.markAsBorrowed(): void— 가용성을 false로 설정합니다.markAsReturned(): void— 가용성을 true로 설정합니다.
User.php— Book 파일을 포함하고 도서관 회원을 나타내는User클래스를 생성합니다. 사용자는 생성자 프로모션을 통해id(int)와name(string)이라는 두 개의 readonly 속성을 가져야 합니다. 처음에 비어 있는 private 배열$borrowedBooks와3으로 설정된 상수MAX_BOOKS를 포함하세요. 다음 메서드들을 추가합니다:getBorrowedBooks(): array— 대출된 도서 배열을 반환합니다.canBorrow(): bool— 사용자가 대출한 도서가 MAX_BOOKS보다 적으면 true를 반환합니다.addBook(Book $book): void— 대출 배열에 도서를 추가합니다.removeBook(string $isbn): void—array_filter를 사용하여 ISBN으로 도서를 제거합니다.
main.php— User 파일을 포함하고 클래스들을 실행합니다. 사용자 ID, 사용자 이름, 도서 ISBN, 도서 제목(저자는"Unknown"으로 설정)의 네 가지 입력을 받게 됩니다.제공된 값으로
User와Book을 생성합니다. 처음에 사용자가 대출 가능한지 여부를 출력한 다음, 사용자가 도서를 대출하도록 합니다(도서를 대출 중으로 표시하고 사용자에게 추가). 마지막으로 도서의 가용성 상태와 대출된 도서의 수를 출력합니다.출력 형식:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
캡슐화가 내부 상태를 어떻게 보호하는지 주목하세요. 도서의 가용성은 전용 메서드를 통해서만 변경되며, 사용자의 대출 도서는 제어된 접근을 통해 관리됩니다. 이 기초는 다음에 구축할 대출 시스템을 지원할 것입니다.
직접 해보기
<?php
require_once 'User.php';
// 입력 읽기
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: 제공된 id와 name으로 User 객체 생성
// TODO: 제공된 isbn, title, author로 Book 객체 생성
// TODO: 사용자가 처음에 대출 가능한지 여부 출력
// 형식: "Can borrow: yes" 또는 "Can borrow: no"
// TODO: 사용자가 책을 대출하도록 처리:
// - 책을 대출 중으로 표시
// - 사용자의 대출 목록에 책 추가
// TODO: 책의 대출 가능 여부 출력
// 형식: "Book available: yes" 또는 "Book available: no"
// TODO: 대출된 도서 수 출력
// 형식: "Books borrowed: [count]"
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션