Arama İşlevi
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 85 / 91.
Görev
KolayArama işlevi ekleyerek Kütüphane Yönetim Sistemimizi geliştirelim. Kullanıcıların belirli bir başlık ararken, yazara göre göz atarken veya şu anda ödünç alınabilir kitapları kontrol ederken kitapları kolayca bulabilmesi gerekir.
Kodunuzu dört dosya arasında düzenleyeceksiniz:
Book.php: readonly özelliklere (Book,isbn,title), başlangıç değeriauthorolan private bir$isAvailableözelliğine ve şu metotlara sahiptruesınıfınız:isAvailable(),markAsBorrowed()vemarkAsReturned().User.php: Book dosyasını dahil edin. readonly özelliklere (User,id), private birnamedizisine, değeri$borrowedBooksolan birMAX_BOOKSsabitine ve şu metotlara sahip3sınıfınız:getBorrowedBooks(),canBorrow(),addBook(Book $book)veremoveBook(string $isbn).Library.php: User dosyasını dahil edin. Mevcut işlevselliğe ek olarak üç yeni arama metodu içerecek şekildeLibrarysınıfınızı genişletin:searchByTitle(string $keyword): array: başlığı anahtar kelimeyi içeren tüm kitapları döndürür (büyük/küçük harfe duyarsız)searchByAuthor(string $author): array: yazar adının arama terimini içerdiği tüm kitapları döndürür (büyük/küçük harfe duyarsız)getAvailableBooks(): array: yalnızca şu anda ödünç alınabilir olan kitapları döndürür
Büyük/küçük harfe duyarsız eşleştirme için ok fonksiyonlarıyla birlikte
array_filtervestriposkullanın.striposeşleşme bulunamadığındafalsedöndürür; bu nedenle!== falsekontrolünü yapmayı unutmayın.main.php: Library dosyasını dahil edin. İki girdi alacaksınız: bir arama anahtar kelimesi ve bir yazar adı.Bir
Libraryoluşturun ve şu dört kitabı ekleyin:- ISBN:
"978-0", Başlık:"PHP Basics", Yazar:"John Smith" - ISBN:
"978-1", Başlık:"Advanced PHP", Yazar:"Jane Doe" - ISBN:
"978-2", Başlık:"Python Guide", Yazar:"John Smith" - ISBN:
"978-3", Başlık:"Web Development", Yazar:"Alice Brown"
ISBN'i
"978-1"olan kitabı, kimliğiUserve adı1olan bir"TestUser"kullanarak ödünç alın.Ardından bu aramaları gerçekleştirin ve sonuçları yazdırın:
- İlk girdiyi kullanarak başlığa göre arama yapın ve eşleşen her kitabın başlığını yeni bir satıra yazdırın
- İkinci girdiyi kullanarak yazara göre arama yapın ve eşleşen kitapların sayısını yazdırın
- Ödünç alınabilir kitapları alın ve sayısını yazdırın
Çıktı biçimi:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Bu görev, array_filter ile stripos birleşiminin güçlü ve kullanıcı dostu arama işlevselliği oluşturma şeklini gösterir. Büyük/küçük harfe duyarsız eşleştirme, kullanıcıların arama yaparken tam olarak aynı büyük/küçük harf kullanımını düşünmesine gerek olmadığı anlamına gelir.
Kendin dene
<?php
require_once 'Library.php';
// Girdileri oku
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Bir Library örneği oluştur
// TODO: Kütüphaneye dört kitabı ekle:
// ISBN: "978-0", Başlık: "PHP Basics", Yazar: "John Smith"
// ISBN: "978-1", Başlık: "Advanced PHP", Yazar: "Jane Doe"
// ISBN: "978-2", Başlık: "Python Guide", Yazar: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"
// TODO: ID'si 1 ve adı "TestUser" olan bir User oluştur, kaydet
// TODO: ISBN "978-1" olan kitabı ödünç al
// TODO: $searchKeyword kullanarak başlığa göre ara ve sonuçları yazdır
echo "Title matches:\n";
// Eşleşen her kitabın başlığını yeni bir satıra yazdır
// TODO: $authorName kullanarak yazara göre ara ve sayıyı yazdır
echo "Author matches: " . /* sayı buraya */ "\n";
// TODO: Mevcut kitapları al ve sayıyı yazdır
echo "Available: " . /* sayı buraya */ "\n";
?>Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon11Tür Sistemi ve Hata Yönetimi
Tür BildirimleriNullable TürlerBirleşim ve Kesişim Türleriİstisna SınıflarıÖzel İstisna HiyerarşisiTry, Catch, FinallyTekrar - Form Doğrulayıcı14Proje: Kütüphane Yönetimi
Proje Genel BakışıKitap ve Kullanıcı Sınıfları3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi