Funkcja wyszukiwania
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 85 z 91.
Wyzwanie
ŁatwyUlepszmy nasz system zarządzania biblioteką, dodając funkcję wyszukiwania. Użytkownicy muszą łatwo znajdować książki — niezależnie od tego, czy szukają konkretnego tytułu, przeglądają książki według autora, czy sprawdzają, które z nich są obecnie dostępne do wypożyczenia.
Rozmieścisz kod w czterech plikach:
Book.php: Twoja klasaBookz właściwościami tylko do odczytu (isbn,title,author), prywatną właściwością$isAvailable, której początkową wartością jesttrue, oraz metodami:isAvailable(),markAsBorrowed()imarkAsReturned().User.php: Dołącz plik Book. Twoja klasaUserz właściwościami tylko do odczytu (id,name), prywatną tablicą$borrowedBooks, stałąMAX_BOOKSo wartości3oraz metodami:getBorrowedBooks(),canBorrow(),addBook(Book $book)iremoveBook(string $isbn).Library.php: Dołącz plik User. Rozbuduj swoją klasęLibrary, zachowując dotychczasową funkcjonalność i dodając trzy nowe metody wyszukiwania:searchByTitle(string $keyword): array: zwraca wszystkie książki, których tytuł zawiera słowo kluczowe (bez rozróżniania wielkości liter)searchByAuthor(string $author): array: zwraca wszystkie książki, których nazwisko autora zawiera wyszukiwany tekst (bez rozróżniania wielkości liter)getAvailableBooks(): array: zwraca tylko książki, które są obecnie dostępne do wypożyczenia
Użyj
array_filterz funkcjami strzałkowymi istriposdo wyszukiwania bez rozróżniania wielkości liter. Pamiętaj, żestriposzwracafalse, gdy nie znajdzie dopasowania, więc sprawdź, czy wynik to!== false.main.php: Dołącz plik Library. Otrzymasz dwa dane wejściowe: słowo kluczowe do wyszukiwania i nazwisko autora.Utwórz obiekt
Libraryi dodaj do niego te cztery książki:- ISBN:
"978-0", tytuł:"PHP Basics", autor:"John Smith" - ISBN:
"978-1", tytuł:"Advanced PHP", autor:"Jane Doe" - ISBN:
"978-2", tytuł:"Python Guide", autor:"John Smith" - ISBN:
"978-3", tytuł:"Web Development", autor:"Alice Brown"
Wypożycz książkę o numerze ISBN
"978-1", używając obiektuUsero ID1i nazwie"TestUser".Następnie wykonaj te wyszukiwania i wyświetl wyniki:
- Wyszukaj według tytułu, używając pierwszego danych wejściowych, i wyświetl tytuł każdej pasującej książki w nowej linii
- Wyszukaj według autora, używając drugiego danych wejściowych, i wyświetl liczbę pasujących książek
- Pobierz dostępne książki i wyświetl ich liczbę
Format wyjściowy:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
To wyzwanie pokazuje, jak połączenie array_filter z stripos pozwala utworzyć zaawansowaną i przyjazną dla użytkownika funkcję wyszukiwania. Wyszukiwanie bez rozróżniania wielkości liter oznacza, że użytkownicy nie muszą zwracać uwagi na dokładną pisownię wielkimi i małymi literami.
Spróbuj swoich sił
<?php
require_once 'Library.php';
// Odczytaj dane wejściowe
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Utwórz instancję Library
// TODO: Dodaj cztery książki do biblioteki:
// ISBN: "978-0", Tytuł: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Tytuł: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Tytuł: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Tytuł: "Web Development", Autor: "Alice Brown"
// TODO: Utwórz instancję User z ID 1 i nazwą "TestUser", a następnie zarejestruj tego użytkownika
// TODO: Wypożycz książkę o ISBN "978-1"
// TODO: Wyszukaj według tytułu, używając $searchKeyword, i wypisz wyniki
echo "Title matches:\n";
// Wypisz tytuł każdej pasującej książki w osobnym wierszu
// TODO: Wyszukaj według autora, używając $authorName, i wypisz liczbę wyników
echo "Author matches: " . /* liczba tutaj */ "\n";
// TODO: Pobierz dostępne książki i wypisz ich liczbę
echo "Available: " . /* liczba tutaj */ "\n";
?>Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online