Menu
Coddy logo textTech

Arama İşlevselliği

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 85 / 91.

challenge icon

Görev

Kolay

Arama işlevselliği ekleyerek Kütüphane Yönetim Sistemimizi geliştirelim. Kullanıcıların belirli bir başlığı ararken, yazara göre göz atarken veya şu anda ödünç alınabilecek kitapları kontrol ederken kitapları kolayca bulabilmeleri gerekir.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Book.php — Salt okunur özelliklere (isbn, title, author) sahip Book sınıfınız, true olarak başlayan özel bir $isAvailable özelliği ve şu metotlar: isAvailable(), markAsBorrowed() ve markAsReturned().
  • User.php — Book dosyasını dahil edin. Salt okunur özelliklere (id, name) sahip User sınıfınız, özel bir $borrowedBooks dizisi, 3 değerinde bir MAX_BOOKS sabiti ve şu metotlar: getBorrowedBooks(), canBorrow(), addBook(Book $book) ve removeBook(string $isbn).
  • Library.php — User dosyasını dahil edin. Library sınıfınızı mevcut işlevselliğin yanı sıra üç yeni arama metoduyla genişletin:
    • searchByTitle(string $keyword): array — başlığın anahtar kelimeyi içerdiği tüm kitapları döndürür (büyük/küçük harf 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 harf duyarsız)
    • getAvailableBooks(): array — yalnızca şu anda ödünç alınmaya uygun olan kitapları döndürür

    Büyük/küçük harf duyarsız eşleştirme için ok fonksiyonları (arrow functions) ile array_filter ve stripos kullanın. stripos fonksiyonunun eşleşme bulunmadığında false döndürdüğünü unutmayın, bu nedenle !== false kontrolü yapın.

  • main.php — Library dosyasını dahil edin. İki girdi alacaksınız: bir arama anahtar kelimesi ve bir yazar adı.

    Bir Library oluşturun ve şu dört kitabı ekleyin:

    • 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"

    ID'si 1 ve adı "TestUser" olan bir User kullanarak ISBN'si "978-1" olan kitabı ödünç alın.

    Ardından bu aramaları gerçekleştirin ve sonuçları yazdırın:

    1. İlk girdiyi kullanarak başlığa göre arama yapın, eşleşen her kitabın başlığını yeni bir satıra yazdırın
    2. İkinci girdiyi kullanarak yazara göre arama yapın, eşleşen kitapların sayısını yazdırın
    3. Mevcut kitapları alın ve sayısını yazdırın

    Çıktı formatı:

    Title matches:
    [title1]
    [title2]
    ...
    Author matches: [count]
    Available: [count]

Bu meydan okuma, array_filter ile stripos birleşiminin nasıl güçlü ve kullanıcı dostu bir arama işlevselliği oluşturduğunu göstermektedir. Büyük/küçük harf duyarsız eşleştirme, kullanıcıların arama yaparken tam büyük harf kullanımına dikkat etmelerine gerek kalmadığı 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şturun

// TODO: Kütüphaneye 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"

// TODO: ID'si 1 ve adı "TestUser" olan bir Kullanıcı oluşturun, onları kaydedin

// TODO: "978-1" ISBN'li kitabı ödünç alın

// TODO: $searchKeyword kullanarak başlığa göre arama yapın ve sonuçları yazdırın
echo "Title matches:\n";
// Eşleşen her kitabın başlığını yeni bir satıra yazdırın

// TODO: $authorName kullanarak yazara göre arama yapın ve sayıyı yazdırın
echo "Author matches: " . /* sayı buraya */ "\n";

// TODO: Mevcut kitapları alın ve sayıyı yazdırın
echo "Available: " . /* sayı buraya */ "\n";

?>

Nesne Yönelimli Programlama bölümündeki tüm dersler