Menu
Coddy logo textTech

Arama İşlevi

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ş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ğeri author olan private bir $isAvailable özelliğine ve şu metotlara sahip true sınıfınız: isAvailable(), markAsBorrowed() ve markAsReturned().
  • User.php: Book dosyasını dahil edin. readonly özelliklere (User, id), private bir name dizisine, değeri $borrowedBooks olan bir MAX_BOOKS sabitine ve şu metotlara sahip 3 sınıfınız: getBorrowedBooks(), canBorrow(), addBook(Book $book) ve removeBook(string $isbn).
  • Library.php: User dosyasını dahil edin. Mevcut işlevselliğe ek olarak üç yeni arama metodu içerecek şekilde Library sı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_filter ve stripos kullanın. stripos eşleşme bulunamadığında false döndürür; bu nedenle !== false kontrolü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 Library oluş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ği User ve adı 1 olan bir "TestUser" kullanarak ö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 ve 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 ve eşleşen kitapların sayısını yazdırın
    3. Ö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]

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

Kendi başına pratik yap: Online PHP derleyicisi