Chức năng tìm kiếm
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 85 trên 91.
Thử thách
DễHãy nâng cấp hệ thống quản lý thư viện bằng cách bổ sung chức năng tìm kiếm. Người dùng cần dễ dàng tìm sách, dù họ đang tìm một nhan đề cụ thể, duyệt sách theo tác giả hay kiểm tra những sách hiện có để mượn.
Bạn sẽ sắp xếp code trong bốn tệp:
Book.php: LớpBookvới các thuộc tính chỉ đọc (isbn,title,author), một thuộc tính riêng tư$isAvailablecó giá trị ban đầu làtruevà các phương thức:isAvailable(),markAsBorrowed()vàmarkAsReturned().User.php: Thêm tệp Book. LớpUsercủa bạn có các thuộc tính chỉ đọc (id,name), một mảng riêng tư$borrowedBooks, hằng sốMAX_BOOKScó giá trị3và các phương thức:getBorrowedBooks(),canBorrow(),addBook(Book $book)vàremoveBook(string $isbn).Library.php: Thêm tệp User. Mở rộng lớpLibraryvới các chức năng hiện có cùng ba phương thức tìm kiếm mới:searchByTitle(string $keyword): array: trả về tất cả sách có nhan đề chứa từ khóa (không phân biệt chữ hoa chữ thường)searchByAuthor(string $author): array: trả về tất cả sách có tên tác giả chứa cụm từ tìm kiếm (không phân biệt chữ hoa chữ thường)getAvailableBooks(): array: chỉ trả về những sách hiện có để cho mượn
Dùng
array_filtervới hàm mũi tên vàstriposđể so khớp không phân biệt chữ hoa chữ thường. Hãy nhớ rằngstripostrả vềfalsekhi không tìm thấy kết quả, vì vậy hãy kiểm tra!== false.main.php: Thêm tệp Library. Bạn sẽ nhận hai đầu vào: từ khóa tìm kiếm và tên tác giả.Tạo một
Libraryvà thêm bốn cuốn sách sau:- ISBN:
"978-0", nhan đề:"PHP Basics", tác giả:"John Smith" - ISBN:
"978-1", nhan đề:"Advanced PHP", tác giả:"Jane Doe" - ISBN:
"978-2", nhan đề:"Python Guide", tác giả:"John Smith" - ISBN:
"978-3", nhan đề:"Web Development", tác giả:"Alice Brown"
Mượn sách có ISBN
"978-1"bằng cách dùng mộtUsercó ID1và tên"TestUser".Sau đó thực hiện các tìm kiếm sau và in kết quả:
- Tìm theo nhan đề bằng đầu vào thứ nhất, in nhan đề của từng sách khớp trên một dòng mới
- Tìm theo tác giả bằng đầu vào thứ hai, in số lượng sách khớp
- Lấy danh sách sách hiện có và in số lượng
Định dạng đầu ra:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Thử thách này minh họa cách kết hợp array_filter với stripos để tạo chức năng tìm kiếm mạnh mẽ, dễ dùng. Việc so khớp không phân biệt chữ hoa chữ thường giúp người dùng không cần lo về cách viết hoa chính xác khi tìm kiếm.
Tự làm thử
<?php
require_once 'Library.php';
// Đọc dữ liệu đầu vào
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Tạo một instance của Library
// TODO: Thêm bốn cuốn sách vào thư viện:
// ISBN: "978-0", Tiêu đề: "PHP Basics", Tác giả: "John Smith"
// ISBN: "978-1", Tiêu đề: "Advanced PHP", Tác giả: "Jane Doe"
// ISBN: "978-2", Tiêu đề: "Python Guide", Tác giả: "John Smith"
// ISBN: "978-3", Tiêu đề: "Web Development", Tác giả: "Alice Brown"
// TODO: Tạo một User có ID 1 và tên "TestUser", rồi đăng ký người dùng đó
// TODO: Mượn cuốn sách có ISBN "978-1"
// TODO: Tìm theo tiêu đề bằng $searchKeyword và in kết quả
echo "Title matches:\n";
// In tiêu đề của mỗi cuốn sách khớp trên một dòng mới
// TODO: Tìm theo tác giả bằng $authorName và in ra số lượng kết quả
echo "Author matches: " . /* đếm tại đây */ "\n";
// TODO: Lấy các cuốn sách hiện có và in ra số lượng
echo "Available: " . /* đếm tại đây */ "\n";
?>Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh11Hệ thống kiểu dữ liệu và xử lý lỗi
Khai báo kiểu dữ liệuKiểu dữ liệu có thể nhận giá trị nullKiểu hợp và kiểu giaoCác lớp ngoại lệHệ thống phân cấp ngoại lệ tùy chỉnhTry, Catch, FinallyÔn tập: Trình xác thực biểu mẫu14Dự án: Quản lý thư viện
Tổng quan dự ánLớp sách và người dùng3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online