Ödünç Alma Sistemi
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 84 / 91.
Görev
KolayLibrary sınıfını oluşturarak Kütüphane Yönetim Sistemimize hayat verelim; bu sınıf tüm ödünç alma işlemlerini yönetir. Bu merkezi koordinatör, kitap koleksiyonunu yönetecek ve kütüphanemizin sorunsuz çalışmasını sağlayan kuralları uygulayacaktır.
Kodunuzu dört dosyaya ayıracaksınız:
Book.php: Önceki derste oluşturduğunuz, salt okunur özelliklere (Book,isbn,title) sahipauthorsınıfınız; başlangıç değeri$isAvailableolan özel birtrueözelliği ve şu metotlar:isAvailable(),markAsBorrowed()vemarkAsReturned().User.php: Book dosyasını dahil edin. Salt okunur özelliklere (User,id) sahipnamesınıfınız; özel bir$borrowedBooksdizisi,MAX_BOOKSdeğerine sahip bir3sabiti ve şu metotlar:getBorrowedBooks(),canBorrow(),addBook(Book $book)veremoveBook(string $isbn).Library.php: User dosyasını dahil edin. Kitap koleksiyonunu yöneten birLibrarysınıfı oluşturun. Kütüphanenizde şunlar bulunmalıdır:- ISBN'ye göre indekslenmiş kitapları depolamak için özel bir
$booksdizisi addBook(Book $book): void: koleksiyona bir kitap eklerfindBook(string $isbn): ?Book: kitabı döndürür veya bulunamazsa null döndürürborrowBook(User $user, string $isbn): string: ödünç alma işlemini doğrular ve gerçekleştirir; uygun mesajları döndürürreturnBook(User $user, string $isbn): string: iade işlemlerini gerçekleştirir ve hem kitabın hem de kullanıcının durumunu günceller
borrowBookmetodu üç koşulu sırayla kontrol etmeli ve şu tam mesajları döndürmelidir:"Book not found": kitap mevcut değilse"Book is not available": kitap zaten ödünç alınmışsa"Borrowing limit reached": kullanıcının 3 kitabı varsa"Successfully borrowed: [title]": işlem başarılı olduğunda
returnBookmetodu, kitap mevcut değilse"Book not found", işlem başarılı olduğunda ise"Successfully returned: [title]"döndürmelidir.- ISBN'ye göre indekslenmiş kitapları depolamak için özel bir
main.php: Library dosyasını dahil edin. İki girdi alacaksınız: bir ISBN ve bir kitap başlığı.Bir
Library, ID'siUserve adı1olan bir"Alice"ve verilen ISBN ile başlığa, ayrıcaBookyazarına sahip bir"Unknown"oluşturun. Kitabı kütüphaneye ekleyin, ardından aşağıdaki işlemleri gerçekleştirin ve her sonucu yeni bir satıra yazdırın:- Kitabı ödünç alın
- Aynı kitabı tekrar ödünç almaya çalışın
- Kitabı iade edin
- Kitabı bir kez daha ödünç alın
Bu görev, Library sınıfının iş mantığını nasıl merkezileştirdiğini gösterir. Koşulları doğrular, Book ve User nesneleri arasındaki durum değişikliklerini koordine eder ve her işlem için anlamlı geri bildirim sağlar.
Kendin dene
<?php
require_once 'Library.php';
// Girdiyi oku
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Bir Library örneği oluştur
// TODO: ID 1 ve adı "Alice" olan bir User oluştur
// TODO: Sağlanan ISBN, title ve yazarı "Unknown" olan bir Book oluştur
// TODO: Kitabı kütüphaneye ekle
// TODO: Bu işlemleri gerçekleştir ve her sonucu yeni bir satıra yazdır:
// 1. Kitabı ödünç al
// 2. Aynı kitabı tekrar ödünç almayı dene
// 3. Kitabı iade et
// 4. Kitabı bir kez daha ödünç al
?>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