Menu
Coddy logo textTech

Özet - Ö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ğiniz tüm sihirli metotları bir araya getiren bir Collection sınıfı oluşturalım. Koleksiyonunuz, kullanımı doğal hissettiren esnek bir veri konteyneri görevi görecek; öğeleri anahtara göre saklayacak, var olup olmadıklarını kontrol edecek, öğeleri dinamik olarak bulacak ve bağımsız kopyalar oluşturacaktır.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Collection.php — Öğeleri özel bir dizide saklayan bir Collection sınıfı oluşturun. Koleksiyonunuz, birlikte çalışan şu sihirli metotları desteklemelidir:
    • __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 saklar
    • __isset($key) — Anahtarın koleksiyonda mevcut olup olmadığını döndürür
    • __unset($key) — Verilen anahtardaki öğeyi kaldırır
    • __call($method, $args) — Dinamik bulucu metotları yönetir. findBy ile başlayan bir metot çağrıldığında (findByRole veya findByStatus gibi), alan adını çıkarın ("findBy"den sonraki kısmı küçük harfe çevirin), tüm öğeler arasında arama yapın ve bu alanın ilk argümanla eşleştiği ilk öğenin anahtarını döndürün. Eşleşme bulunamazsa null döndürür. Diğer tüm metotlar için "Unknown method: [method]" döndürün
    • __toString()"Collection([count] items)" döndürür; burada count öğe sayısıdır
    • __clone() — Klonlandığında, öğeler dizisi yeni bir kopya olmalıdır (orijinale bir referans değil)
  • main.php — Collection dosyasını dahil edin. Üç girdi alacaksınız: bir anahtar adı, bir rol değeri ve bir arama rolü. Bir kullanıcı koleksiyonu oluşturun ve tüm sihirli metotları gösterin:
    • Yeni bir Collection oluşturun
    • Girdi anahtarıyla bir kullanıcı ekleyin; "name" değeri anahtara, "role" değeri ise girdi rol değerine ayarlanmış bir dizi saklayın
    • "bob" anahtarıyla başka bir kullanıcı ekleyin, ["name" => "Bob", "role" => "editor"] saklayın
    • isset() kullanarak girdi anahtarının var olup olmadığını yazdırın — "exists" veya "missing" çıktısını verin
    • Arama rolünü argüman olarak kullanarak dinamik findByRole() metodunu çağırmanın sonucunu yazdırın (bu, eşleşen kullanıcının anahtarını döndürmelidir veya null ise hiçbir şey döndürmemelidir)
    • echo kullanarak koleksiyonu yazdırın (__toString'i tetikler)
    • Koleksiyonu klonlayın, ardından klondan girdi anahtarını kaldırın (unset)
    • Girdi anahtarının orijinal koleksiyonda var olup olmadığını yazdırın — "exists" veya "missing" çıktısını verin (klon bağımsız olduğu için hala var olmalıdır)

Her çıktı kendi satırında olmalıdır. Dinamik bulucu, koleksiyonunuzdaki 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şturun

// TODO: Girdi anahtarıyla bir kullanıcı ekleyin, "name" => key ve "role" => roleValue içeren bir dizi saklayın

// TODO: "bob" anahtarıyla başka bir kullanıcı ekleyin, ["name" => "Bob", "role" => "editor"] saklayın

// TODO: isset() kullanarak girdi anahtarının var olup olmadığını yazdırın - çıktı "exists" veya "missing" olmalı

// TODO: searchRole argümanıyla findByRole() çağırmanın sonucunu yazdırın

// TODO: echo kullanarak koleksiyonu yazdırın (__toString metodunu tetikler)

// TODO: Koleksiyonu kopyalayın (clone), ardından kopya üzerinden girdi anahtarını kaldırın (unset)

// TODO: Girdi anahtarının ORİJİNAL koleksiyonda var olup olmadığını yazdırın - "exists" veya "missing"

?>

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