class Anonim
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 58 dari 91.
Terkadang kamu membutuhkan object sederhana untuk sekali pakai tanpa perlu mendefinisikan class lengkap. Anonymous classes memungkinkanmu membuat object langsung saat dibutuhkan. Anonymous classes sangat berguna jika dipadukan dengan dependency injection.
Anonymous class didefinisikan menggunakan new class yang diikuti oleh isi class:
<?php
$logger = new class {
public function log(string $message): void {
echo "Log: $message";
}
};
$logger->log("Hello!");
Output:
Log: Hello!class anonim menjadi sangat berguna saat mengimplementasikan interface. Ini cocok untuk pengujian atau saat kamu membutuhkan implementasi cepat tanpa memenuhi basis kodemu dengan class yang hanya digunakan sekali:
<?php
interface Notifier {
public function send(string $message): string;
}
function notify(Notifier $notifier, string $msg): string {
return $notifier->send($msg);
}
$result = notify(new class implements Notifier {
public function send(string $message): string {
return "Sent: $message";
}
}, "Test message");
echo $result;
Output:
Sent: Test messageclass anonim juga dapat mewarisi class lain, menggunakan trait, dan menerima argumen constructor. class ini memiliki akses penuh ke fitur OOP, hanya saja didefinisikan secara langsung, bukan dalam file terpisah. Gunakan class anonim saat definisi class lengkap terasa berlebihan, tetapi kamu tetap membutuhkan perilaku berorientasi object.
Tantangan
MudahMari buat sistem pemformat data yang menunjukkan keunggulan class anonim. Daripada membuat file class terpisah untuk implementasi sederhana yang hanya digunakan sekali, kamu akan menggunakan class anonim untuk membuat implementasi dengan cepat tepat di tempat kamu membutuhkannya.
Kamu akan menyusun kodemu dalam dua file:
FormatterInterface.php: Definisikan antarmuka bernamaFormatterInterfacedengan satu methodformat(string $data): string. Ini menetapkan kontrak yang harus diikuti oleh formatter mana pun.main.php: Sertakan file antarmuka dan buat classDataProcessoryang menggunakan injeksi dependensi untuk menerima formatter apa pun. Class tersebut harus:- Menerima
FormatterInterfacedalam constructornya - Memiliki method
process(string $data)yang meneruskan pemrosesan ke formatter yang diinjeksi dan mengembalikan hasilnya
Kamu akan menerima dua input: tipe format (
"upper"atau"reverse") dan string yang akan diformat.Berdasarkan tipe format, buat class anonim yang mengimplementasikan
FormatterInterface:- Untuk
"upper": methodformat()harus mengembalikan data yang diubah menjadi huruf besar - Untuk
"reverse": methodformat()harus mengembalikan data dalam urutan terbalik
Injeksi class anonim yang kamu buat ke dalam
DataProcessor, panggilprocess()dengan string input, lalu cetak hasilnya.- Menerima
Pendekatan ini cocok ketika kamu membutuhkan implementasi cepat tanpa membuat basis kodemu berantakan dengan file class yang hanya digunakan sekali. Class anonim dibuat secara inline, mengimplementasikan antarmuka yang diwajibkan, dan dapat diteruskan ke mana pun antarmuka tersebut diharapkan.
Coba sendiri
<?php
require_once 'FormatterInterface.php';
// TODO: Buat class DataProcessor yang:
// - Menerima FormatterInterface dalam konstruktornya
// - Memiliki method process(string $data) yang mendelegasikan tugas ke formatter
// Baca input
$formatType = trim(fgets(STDIN));
$inputString = trim(fgets(STDIN));
// TODO: Berdasarkan $formatType ("upper" atau "reverse"), buat class anonim
// yang mengimplementasikan FormatterInterface
// - Untuk "upper": format() harus mengembalikan data dalam huruf besar
// - Untuk "reverse": format() harus mengembalikan data dengan urutan terbalik
// TODO: Buat DataProcessor dengan formatter class anonim milikmu
// Panggil process() dengan string input dan cetak hasilnya
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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 Siswa10Konsep OOP Lanjutan
Komposisi vs PewarisanInjeksi Dependensiclass AnonimEnum (PHP 8.1)Fiber (PHP 8.1)Pendalaman Kloning objectGenerator dan Iterator2Namespace 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