Menu
CoddyTech

Ringkasan: Koleksi Kustom

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 50 dari 91.

challenge icon

Tantangan

Mudah

Mari kita buat class Collection yang menggabungkan semua magic method yang telah kamu pelajari di bab ini. Collection-mu akan berfungsi sebagai wadah data fleksibel yang terasa alami digunakan: menyimpan item berdasarkan key, memeriksa apakah item tersebut ada, mencari item secara dinamis, dan membuat salinan independen.

Kamu akan menyusun kodemu dalam dua file:

  • Collection.php: Buat class Collection yang menyimpan item dalam array privat. Collection-mu harus mendukung magic method berikut agar bekerja bersama:
    • __construct(): Menerima array opsional berisi item awal, dengan array kosong sebagai nilai default
    • __get($key): Mengembalikan item pada key yang diberikan, atau null jika item tersebut tidak ada
    • __set($key, $value): Menyimpan nilai pada key yang diberikan
    • __isset($key): Mengembalikan informasi apakah key tersebut ada di collection
    • __unset($key): Menghapus item pada key yang diberikan
    • __call($method, $args): Menangani method pencari dinamis. Saat method yang diawali findBy dipanggil, seperti findByRole atau findByStatus, ambil nama field-nya (ubah bagian setelah "findBy" menjadi huruf kecil), cari di semua item, lalu kembalikan key item pertama yang field-nya cocok dengan argumen pertama. Kembalikan null jika tidak ada yang cocok. Untuk method lainnya, kembalikan "Unknown method: [method]"
    • __toString(): Mengembalikan "Collection([count] items)", dengan count sebagai jumlah item
    • __clone(): Saat collection di-clone, array item harus menjadi salinan baru, bukan referensi ke array asli
  • main.php: Sertakan file Collection. Kamu akan menerima tiga input: nama key, nilai role, dan role yang dicari. Buat collection pengguna dan tunjukkan semua magic method:
    • Buat Collection baru
    • Tambahkan pengguna dengan key dari input, lalu simpan array dengan "name" yang nilainya adalah key tersebut dan "role" yang nilainya adalah input nilai role
    • Tambahkan pengguna lain dengan key "bob", lalu simpan ["name" => "Bob", "role" => "editor"]
    • Gunakan isset() untuk mencetak apakah key dari input ada: keluarkan "exists" atau "missing"
    • Cetak hasil pemanggilan method dinamis findByRole() dengan role yang dicari sebagai argumen, method ini seharusnya mengembalikan key pengguna yang cocok, atau tidak mengembalikan apa pun jika hasilnya null
    • Cetak collection menggunakan echo, yang memicu __toString
    • Clone collection, lalu hapus key dari input dari hasil clone
    • Cetak apakah key dari input ada di collection asli: keluarkan "exists" atau "missing", key tersebut seharusnya tetap ada karena clone tidak bergantung pada collection asli

Setiap output harus berada di barisnya sendiri. Pencari dinamis mengasumsikan setiap item dalam collection-mu adalah array asosiatif dengan field seperti "name" dan "role".

Coba sendiri

<?php

require_once 'Collection.php';

// Baca input
$keyName = trim(fgets(STDIN));
$roleValue = trim(fgets(STDIN));
$searchRole = trim(fgets(STDIN));

// TODO: Buat Collection baru

// TODO: Tambahkan pengguna dengan key dari input, lalu simpan array dengan "name" => key dan "role" => roleValue

// TODO: Tambahkan pengguna lain dengan key "bob", lalu simpan ["name" => "Bob", "role" => "editor"]

// TODO: Tampilkan apakah key dari input ada menggunakan isset(), dengan output "exists" atau "missing"

// TODO: Tampilkan hasil pemanggilan findByRole() dengan searchRole sebagai argumen

// TODO: Tampilkan collection menggunakan echo (memicu __toString)

// TODO: Klon collection, lalu hapus key dari input pada hasil klonnya

// TODO: Tampilkan apakah key dari input ada dalam collection ASLI, dengan output "exists" atau "missing"

?>

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online