Menu
CoddyTech

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 message

class 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.

challenge icon

Tantangan

Mudah

Mari 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 bernama FormatterInterface dengan satu method format(string $data): string. Ini menetapkan kontrak yang harus diikuti oleh formatter mana pun.
  • main.php: Sertakan file antarmuka dan buat class DataProcessor yang menggunakan injeksi dependensi untuk menerima formatter apa pun. Class tersebut harus:
    • Menerima FormatterInterface dalam 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": method format() harus mengembalikan data yang diubah menjadi huruf besar
    • Untuk "reverse": method format() harus mengembalikan data dalam urutan terbalik

    Injeksi class anonim yang kamu buat ke dalam DataProcessor, panggil process() dengan string input, lalu cetak hasilnya.

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

?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online