Tekrar - Özel Koleksiyon
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 50 / 91.
Görev
KolayBu bölümde öğrendiğin tüm sihirli yöntemleri bir araya getiren bir Collection sınıfı oluşturalım. Koleksiyonun, kullanımı doğal hissettiren esnek bir veri kapsayıcısı görevi görecek: öğeleri anahtara göre depolayacak, var olup olmadıklarını kontrol edecek, öğeleri dinamik olarak bulacak ve bağımsız kopyalar oluşturacak.
Kodunu iki dosyaya ayıracaksın:
Collection.php: Öğeleri özel bir dizide depolayan birCollectionsınıfı oluştur. Koleksiyonun aşağıdaki sihirli yöntemleri birlikte desteklemeli:__construct(): İsteğe bağlı bir başlangıç öğeleri dizisi kabul eder (varsayılan olarak boş dizi)__get($key): Verilen anahtardaki öğeyi döndürür veya mevcut değilsenulldöndürür__set($key, $value): Değeri verilen anahtarda depolar__isset($key): Anahtarın koleksiyonda bulunup bulunmadığını döndürür__unset($key): Verilen anahtardaki öğeyi kaldırır__call($method, $args): Dinamik bulucu yöntemlerini işler.findByile başlayan bir yöntem çağrıldığında (findByRoleveyafindByStatusgibi), alan adını çıkarır ("findBy" sonrasındaki kısmı küçük harfe dönüştürür), tüm öğeler arasında arama yapar ve bu alanın ilk bağımsız değişkenle eşleştiği ilk öğenin anahtarını döndürür. Eşleşme bulunamazsanulldöndürür. Diğer tüm yöntemler için"Unknown method: [method]"döndürür__toString(): Öğe sayısının count olduğu"Collection([count] items)"ifadesini döndürür__clone(): Klonlandığında, öğeler dizisi yeni bir kopya olmalıdır (orijinale referans olmamalıdır)
main.php: Collection dosyasını dahil et. Üç girdi alacaksın: bir anahtar adı, bir rol değeri ve aranacak bir rol. Kullanıcılardan oluşan bir koleksiyon oluştur ve tüm sihirli yöntemleri göster:- Yeni bir
Collectionoluştur - Girdi anahtarıyla bir kullanıcı ekle;
"name"değerini anahtara,"role"değerini ise girilen rol değerine ayarlayan bir dizi depola "bob"anahtarına sahip başka bir kullanıcı ekle ve["name" => "Bob", "role" => "editor"]değerini depolaisset()kullanarak girdi anahtarının var olup olmadığını yazdır:"exists"veya"missing"çıktısını ver- Dinamik
findByRole()yöntemini arama rolünü bağımsız değişken olarak kullanarak çağırmanın sonucunu yazdır (bu, eşleşen kullanıcının anahtarını döndürmeli veya sonuç null ise hiçbir şey döndürmemeli) echokullanarak koleksiyonu yazdır (__toStringtetiklenir)- Koleksiyonu klonla, ardından klondan girdi anahtarını kaldır
- Girdi anahtarının orijinal koleksiyonda bulunup bulunmadığını yazdır:
"exists"veya"missing"çıktısını ver (klon bağımsız olduğundan hâlâ mevcut olmalıdır)
- Yeni bir
Her çıktı kendi satırında olmalıdır. Dinamik bulucu, koleksiyonundaki her öğenin "name" ve "role" gibi alanlara sahip ilişkisel bir dizi olduğunu varsayar.
Kendin dene
<?php
require_once 'Collection.php';
// Girdileri oku
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));
// TODO: Yeni bir Collection oluştur
// TODO: Girdi anahtarıyla bir kullanıcı ekle, "name" => key ve "role" => roleValue içeren diziyi saklayarak
// TODO: "bob" anahtarıyla başka bir kullanıcı ekle, ["name" => "Bob", "role" => "editor"] saklayarak
// TODO: Girdi anahtarının var olup olmadığını isset() kullanarak yazdır - "exists" veya "missing" çıktısı ver
// TODO: searchRole argümanıyla findByRole() çağrısının sonucunu yazdır
// TODO: Koleksiyonu echo kullanarak yazdır (__toString'i tetikler)
// TODO: Koleksiyonu klonla, sonra klondan girdi anahtarını unset et
// TODO: Girdi anahtarının ORİJİNAL koleksiyonda var olup olmadığını yazdır - "exists" veya "missing"
?>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 Koleksiyon3Sı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