D. INTROSPECTION

Tujuan Pembelajaran

Setelah menyelesaikan materi ini, mahasiswa diharapkan mampu:

  1. Memahami konsep introspection dalam PHP.
  2. Menggunakan fungsi introspection untuk memeriksa class dan object dalam PHP.
  3. Menerapkan introspection dalam pengembangan program yang fleksibel dan dinamis.
1. MEMERIKSA CLASS

PHP menyediakan beberapa fungsi bawaan untuk menganalisis class, seperti mengecek keberadaan class, melihat method dan property dalam class, serta mengetahui class induk dari suatu class turunan.

Mengecek Keberadaan Class

Sebelum menggunakan class, kita bisa mengecek apakah class tersebut sudah dideklarasikan menggunakan class_exists(). Fungsi ini mengembalikan true jika class ditemukan, dan false jika tidak. Contoh penggunaan:

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
if (class_exists("Karyawan")) {
    echo "Class Karyawan tersedia.";
} else {
    echo "Class Karyawan belum dideklarasikan.";
}

Fungsi class_exists() digunakan untuk memeriksa apakah sebuah class telah dideklarasikan atau belum. Ini berguna untuk menghindari error jika suatu class belum tersedia. Pada contoh di atas, jika class Karyawan sudah didefinisikan sebelumnya, maka akan ditampilkan pesan "Class Karyawan tersedia."; jika belum, maka muncul "Class Karyawan belum dideklarasikan.".

Cara lain untuk mengecek apakah suatu class ada dalam daftar class yang sudah dideklarasikan adalah menggunakan get_declared_classes(), yang mengembalikan array berisi semua class yang sudah dibuat dalam skrip.

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
$semuaClass = get_declared_classes();
if (in_array("Karyawan", $semuaClass)) {
    echo "Class Karyawan ditemukan.";
} else {
    echo "Class Karyawan tidak ditemukan.";
}

Fungsi get_declared_classes() digunakan untuk mengambil semua class yang sudah dideklarasikan dalam script. Dengan in_array(), kita bisa memeriksa apakah sebuah class tertentu (misalnya Karyawan) termasuk dalam daftar tersebut. Jika class tersebut sudah ada, maka ditampilkan pesan bahwa class ditemukan; jika belum, maka ditampilkan bahwa class tidak ditemukan.

Mendapatkan Method dan Property dalam Class

Untuk melihat method yang tersedia dalam suatu class, gunakan get_class_methods(), yang mengembalikan array berisi daftar method dalam class, termasuk method yang diwarisi dari superclass.

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 Pegawai {
    public function bekerja() {}
    private function istirahat() {}
}

$methods = get_class_methods("Pegawai");
print_r($methods); 

Fungsi get_class_methods() digunakan untuk mengambil daftar method yang dapat diakses (hanya public) dari suatu class. Pada contoh di atas, class Pegawai memiliki dua method, yaitu bekerja() dan istirahat(). Namun karena istirahat() bersifat private, maka hanya bekerja() yang ditampilkan dalam hasil fungsi.

Sedangkan untuk mendapatkan daftar property dalam class, gunakan get_class_vars(), yang mengembalikan array asosiatif berisi daftar property dan nilai defaultnya.

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 Mobil {
    public $warna = "Merah";
    private $kecepatan = 100;
}

$properties = get_class_vars("Mobil");
print_r($properties); 

Fungsi get_class_vars() digunakan untuk mengambil semua property yang memiliki visibilitas public dari sebuah class beserta nilai default-nya. Pada contoh di atas, class Mobil memiliki dua properti: warna (public) dan kecepatan (private). Hanya warna yang dimasukkan ke dalam array hasil karena kecepatan tidak bisa diakses dari luar class. Catatan: get_class_vars() hanya mengembalikan property yang memiliki nilai default dan dapat diakses dalam scope saat ini. Property yang belum diinisialisasi atau bersifat private tidak akan muncul.

Mengetahui Class Induk (Parent Class)

Jika suatu class merupakan turunan dari class lain, kita bisa mengetahui class induknya menggunakan get_parent_class(). Contohnya:

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 Kendaraan {}
class Motor extends Kendaraan {}

echo get_parent_class("Motor"); 

Fungsi get_parent_class() digunakan untuk mengetahui nama class induk dari suatu class turunan. Dalam contoh di atas, class Motor merupakan turunan dari Kendaraan, sehingga fungsi akan mengembalikan string "Kendaraan". Fungsi ini sangat berguna dalam refleksi class atau debugging hubungan pewarisan dalam OOP.

Menggunakan ReflectionClass untuk Menganalisis Class

PHP memiliki class ReflectionClass untuk melakukan analisis mendalam terhadap class, termasuk mengecek apakah class bersifat anonymous, menampilkan method static, dan melihat property dalam class.

function tampilkanClass() {
    $classes = get_declared_classes();

    foreach ($classes as $class) {
        echo "Informasi tentang class: {$class}
"; $refleksi = new ReflectionClass($class); // Mengecek apakah class ini adalah anonymous class $isAnonymous = $refleksi->isAnonymous() ? "Ya" : "Tidak"; echo "Apakah Anonymous Class: {$isAnonymous}
"; // Menampilkan method static dalam class echo "Method static:
"; $methods = $refleksi->getMethods(ReflectionMethod::IS_STATIC); if (!count($methods)) { echo "Tidak ada
"; } else { foreach ($methods as $method) { echo "{$method->name}()
"; } } // Menampilkan property dalam class echo "Property dalam class:
"; $properties = $refleksi->getProperties(); if (!count($properties)) { echo "Tidak ada
"; } else { foreach ($properties as $property) { echo "\${$property->name}
"; } } echo "
"; } } tampilkanClass();

ReflectionClass digunakan untuk mendapatkan informasi tentang suatu class. isAnonymous() digunakan untuk mengecek apakah class adalah anonymous class. getMethods(ReflectionMethod::IS_STATIC) mengambil semua method static dalam class. getProperties() mendapatkan semua property dalam class.

Contoh Lain: Mengecek Class, Method, dan Property

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 Produk {
    public $nama = "Laptop";
    private $harga = 15000000;

    public function tampilkanProduk() {
        return "Nama Produk: " . $this->nama;
    }
}

// Mengecek apakah class Produk ada
if (class_exists("Produk")) {
    echo "Class Produk tersedia.<br>";
}

// Mendapatkan method dan property class Produk
$methods = get_class_methods("Produk");
$properties = get_class_vars("Produk");

echo "Method yang tersedia: ";
print_r($methods);
echo "<br>Property yang tersedia: ";
print_r($properties);

Kode ini menggunakan fungsi class_exists(), get_class_methods(), dan get_class_vars() untuk memeriksa ketersediaan class Produk, serta mengambil daftar method dan property yang tersedia. Method privat seperti $harga tidak akan ditampilkan oleh get_class_vars() karena fungsinya hanya mengembalikan properti publik.

LATIHAN

Ayo buktikan pemahamanmu!

Lengkapilah kode program berikut agar dapat memeriksa apakah class Perangkat telah dibuat, dan tampilkan semua method dan property yang tersedia di dalamnya menggunakan fungsi bawaan PHP.

<?php
class Perangkat {
    public $tipe = "Router";
    private $versi = "v2.0";

    public function koneksi() {
        return "Menyambung ke jaringan...";
    }
}

// Cek apakah class Perangkat telah dibuat
if (("Perangkat")) {
    echo "Class Perangkat ditemukan.<br>";
}

// Tampilkan method yang dimiliki class
$daftarMethod = ("Perangkat");
echo "Method dalam class: ";
print_r($daftarMethod);
echo "<br>";

// Tampilkan property dalam class
$daftarProperti = ("Perangkat");
echo "Property dalam class: ";
print_r($daftarProperti);
?>