Ringkasan: Koleksi Kustom
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 50 dari 91.
Tantangan
MudahMari 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 classCollectionyang 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, ataunulljika 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 diawalifindBydipanggil, sepertifindByRoleataufindByStatus, 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. Kembalikannulljika 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
Collectionbaru - 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
- Buat
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
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online