C. ANONYMOUS CLASSES

Tujuan Pembelajaran

Setelah menyelesaikan materi ini, mahasiswa diharapkan mampu:

  1. Memahami konsep anonymous class dalam PHP.
  2. Mengidentifikasi perbedaan antara anonymous class dan named class.
  3. Menerapkan anonymous class dalam pengembangan aplikasi, terutama untuk kebutuhan pengujian (mock objects).
  4. Menjelaskan keterbatasan anonymous class, seperti ketidakmampuannya untuk diserialisasi.
KONSEP DASAR ANONYMOUS CLASS

Anonymous class adalah class tanpa nama yang dibuat secara langsung saat dibutuhkan. Anonymous class sering digunakan dalam pembuatan mock object untuk pengujian, atau ketika kita memerlukan class sekali pakai yang tidak perlu didefinisikan secara eksplisit. Meskipun cara kerjanya sama seperti class biasa, anonymous class tidak memiliki nama tidak bisa digunakan kembali di tempat lain.

Anonymous class dapat digambarkan seperti kita membuat alat sekali pakai langsung di tempat—tanpa memberi nama alatnya—dan langsung menggunakannya di situ juga. Misalnya, sebuah class biasanya seperti memesan kartu identitas dengan nama resmi yang bisa dipakai kapan saja. Sementara anonymous class seperti menulis nama di secarik kertas untuk sekali digunakan saja—langsung dibuang setelah selesai.

Sintaks Anonymous Class dalam PHP

Berikut adalah contoh dasar anonymous class dalam PHP:

AYO PAHAMI!


Petunjuk:

  1. Perhatikan kode program PHP yang ditampilkan di kotak sebelah kiri.
  2. Ketik ulang seluruh baris kode tersebut ke dalam editor di sebelah kanan.
  3. Pastikan setiap baris dan struktur penulisan sesuai dengan contoh (termasuk titik koma, kurung, dll).
  4. Tekan tombol RUN di dalam editor untuk menjalankan program.
  5. Perhatikan hasil keluaran di bawah editor. Apa yang ditampilkan?
<?php
class Orang {
    public $nama = '';

    function getNama() {
        return $this->nama;
    }
}

// Membuat object dari anonymous class yang mewarisi class Orang
$anonim = new class() extends Orang {
    public function getNama() {
        // Mengembalikan nilai tetap untuk tujuan pengujian
        return "Budi";
    }
};

// Memanggil method dari anonymous class
echo $anonim->getNama(); // Output: Budi

Class Orang memiliki properti $nama dan method getNama(). Dalam contoh ini, kita membuat anonymous class yang mewarisi Orang menggunakan new class() extends Orang. Method getNama() dioverride untuk selalu mengembalikan string "Budi". Penting untuk diingat bahwa anonymous class harus diakhiri dengan tanda titik koma ; karena dideklarasikan sekaligus dibuat objeknya, berbeda dengan class biasa.

Penggunaan Anonymous Class dalam Implementasi Interface

Anonymous class juga bisa digunakan untuk mengimplementasikan interface.

AYO PAHAMI!


Petunjuk:

  1. Perhatikan kode program PHP yang ditampilkan di kotak sebelah kiri.
  2. Ketik ulang seluruh baris kode tersebut ke dalam editor di sebelah kanan.
  3. Pastikan setiap baris dan struktur penulisan sesuai dengan contoh (termasuk titik koma, kurung, dll).
  4. Tekan tombol RUN di dalam editor untuk menjalankan program.
  5. Perhatikan hasil keluaran di bawah editor. Apa yang ditampilkan?
<?php
interface Kendaraan {
    public function jalankan();
}

// Membuat object dari anonymous class yang mengimplementasikan interface Kendaraan
$mobil = new class() implements Kendaraan {
    public function jalankan() {
        return "Mobil sedang berjalan...";
    }
};

// Memanggil method dari anonymous class
echo $mobil->jalankan(); // Output: Mobil sedang berjalan...

Contoh di atas menunjukkan penggunaan anonymous class yang mengimplementasikan interface Kendaraan. Interface mendefinisikan method jalankan(), yang kemudian diimplementasikan dalam anonymous class tanpa membuat class terpisah. Pemanggilan $mobil->jalankan() akan menampilkan "Mobil sedang berjalan...". Anonymous class sangat berguna untuk pembuatan object sederhana yang hanya digunakan satu kali.

Anonymous Class dengan Constructor

Anonymous class juga bisa memiliki constructor untuk menerima parameter saat dibuat.

AYO PAHAMI!


Petunjuk:

  1. Perhatikan kode program PHP yang ditampilkan di kotak sebelah kiri.
  2. Ketik ulang seluruh baris kode tersebut ke dalam editor di sebelah kanan.
  3. Pastikan setiap baris dan struktur penulisan sesuai dengan contoh (termasuk titik koma, kurung, dll).
  4. Tekan tombol RUN di dalam editor untuk menjalankan program.
  5. Perhatikan hasil keluaran di bawah editor. Apa yang ditampilkan?
<?php
$pesan = new class("Selamat datang!") {
    private $teks;

    public function __construct($teks) {
        $this->teks = $teks;
    }

    public function tampilkanPesan() {
        return $this->teks;
    }
};

// Memanggil method dari anonymous class
echo $pesan->tampilkanPesan(); // Output: Selamat datang!

Contoh di atas menggunakan anonymous class dengan constructor yang menerima parameter $teks. Nilai parameter disimpan dalam property $teks, kemudian ditampilkan melalui method tampilkanPesan(). Saat objek $pesan dipanggil, hasil yang ditampilkan adalah "Selamat datang!". Ini menunjukkan bahwa anonymous class dapat memiliki constructor dan method seperti class biasa.

Batasan Anonymous Class

Namun, meskipun fleksibel dan efisien untuk penggunaan sekali pakai, anonymous class memiliki dua keterbatasan penting yang perlu diperhatikan:

Gambar 6 Keterbatasan Anonymous Class dalam PHP

Gambar 6 Keterbatasan Anonymous Class dalam PHP

  • Tidak bisa diserialisasi: object dari anonymous class tidak bisa disimpan dalam format string menggunakan serialize(), karena PHP tidak mengenali class tersebut setelah program berakhir.
  • Tidak bisa digunakan kembali di tempat lain: karena tidak memiliki nama, anonymous class hanya bisa digunakan di tempat dideklarasikan dan tidak bisa dipanggil ulang di lokasi berbeda dalam kode program.

LATIHAN

Untuk menguji pemahaman kamu tentang penggunaan anonymous class dalam OOP PHP, kerjakan aktivitas berikut ini!

Lengkapilah kode program berikut agar dapat mencetak hasil keluaran "Pengguna sementara: Anon" menggunakan anonymous class yang mewarisi class Pengguna. Pastikan getNama() di-override dengan benar di dalam anonymous class.

<?php
class Pengguna {
    public function getNama() {
        return "Nama asli";
    }
}

$anon = new class() extends Pengguna {
    public function ___() {
        return "___";
    }
};

echo $anon->___();
?>

Seret potongan kode berikut ke tempat yang kosong:

  • Pengguna
  • getNama
  • Pengguna sementara: Anon