Menu
Coddy logo textTech

Tekrar - Özel Koleksiyon

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

challenge icon

Görev

Kolay

Bu 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 bir Collection sı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ğilse null dö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. findBy ile başlayan bir yöntem çağrıldığında (findByRole veya findByStatus gibi), 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 bulunamazsa null dö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 Collection oluş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 depola
    • isset() 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)
    • echo kullanarak koleksiyonu yazdır (__toString tetiklenir)
    • 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)

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

Kendi başına pratik yap: Online PHP derleyicisi