검색 기능
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 85번째.
챌린지
쉬움검색 기능을 추가하여 도서 관리 시스템을 개선해 봅시다. 사용자는 특정 제목을 찾거나, 저자별로 검색하거나, 현재 대출 가능한 도서가 무엇인지 확인하는 등 도서를 쉽게 찾을 수 있어야 합니다.
코드는 다음 네 개의 파일로 구성됩니다:
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 파일을 포함합니다. 기존 기능에 세 가지 새로운 검색 메서드를 추가하여Library클래스를 확장합니다:searchByTitle(string $keyword): array— 제목에 키워드가 포함된 모든 도서를 반환합니다 (대소문자 구분 없음).searchByAuthor(string $author): array— 저자 이름에 검색어가 포함된 모든 도서를 반환합니다 (대소문자 구분 없음).getAvailableBooks(): array— 현재 대출 가능한 도서만 반환합니다.
대소문자를 구분하지 않는 매칭을 위해 화살표 함수와
stripos를 사용한array_filter를 활용하세요.stripos는 일치하는 항목이 없을 때false를 반환하므로!== false인지 확인해야 함을 기억하세요.main.php— Library 파일을 포함합니다. 검색 키워드와 저자 이름이라는 두 개의 입력을 받습니다.Library인스턴스를 생성하고 다음 네 권의 도서를 추가합니다:- ISBN:
"978-0", 제목:"PHP Basics", 저자:"John Smith" - ISBN:
"978-1", 제목:"Advanced PHP", 저자:"Jane Doe" - ISBN:
"978-2", 제목:"Python Guide", 저자:"John Smith" - ISBN:
"978-3", 제목:"Web Development", 저자:"Alice Brown"
ID가
1이고 이름이"TestUser"인User를 사용하여 ISBN이"978-1"인 도서를 대출합니다.그런 다음 아래 검색을 수행하고 결과를 출력합니다:
- 첫 번째 입력을 사용하여 제목으로 검색하고, 일치하는 각 도서의 제목을 새 줄에 출력합니다.
- 두 번째 입력을 사용하여 저자로 검색하고, 일치하는 도서의 수를 출력합니다.
- 대출 가능한 도서 목록을 가져와 그 수를 출력합니다.
출력 형식:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
이 챌린지는 array_filter와 stripos를 결합하여 강력하고 사용자 친화적인 검색 기능을 만드는 방법을 보여줍니다. 대소문자를 구분하지 않는 매칭 덕분에 사용자는 검색 시 정확한 대소문자 표기에 신경 쓸 필요가 없습니다.
직접 해보기
<?php
require_once 'Library.php';
// 입력 읽기
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Library 인스턴스 생성
// TODO: 라이브러리에 다음 네 권의 도서 추가:
// ISBN: "978-0", Title: "PHP Basics", Author: "John Smith"
// ISBN: "978-1", Title: "Advanced PHP", Author: "Jane Doe"
// ISBN: "978-2", Title: "Python Guide", Author: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"
// TODO: ID가 1이고 이름이 "TestUser"인 User를 생성하고 등록
// TODO: ISBN이 "978-1"인 도서 대출
// TODO: $searchKeyword를 사용하여 제목으로 검색하고 결과 출력
echo "Title matches:\n";
// 검색된 각 도서의 제목을 새 줄에 출력
// TODO: $authorName을 사용하여 저자별로 검색하고 검색된 수 출력
echo "Author matches: " . /* 여기에 count */ "\n";
// TODO: 대출 가능한 도서 목록을 가져와서 그 수를 출력
echo "Available: " . /* 여기에 count */ "\n";
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션