Selamat datang di Part 73 dari seri tutorial pemrograman PHP! Di bagian ini, kita akan menjelajahi Reflection API, sebuah fitur canggih yang memungkinkan Anda untuk menginspeksi dan memanipulasi kelas, objek, fungsi, dan metode secara dinamis. Reflection API sangat berguna untuk debugging, pengujian, dan membangun framework yang fleksibel. Sebagai prasyarat, Anda diharapkan sudah memahami konsep dasar pemrograman berorientasi objek (OOP) dalam PHP, serta memahami tutorial sebelumnya tentang PHP Generators.
Bayangkan Reflection API sebagai kaca pembesar super untuk kode Anda. Alih-alih hanya menjalankan kode, Reflection API memungkinkan Anda untuk melihat ke dalam struktur kode itu sendiri. Anda dapat mengetahui nama kelas, metode, properti, parameter fungsi, dan bahkan komentar (docblock) yang terkait dengannya. Analogi dunia nyata: Seperti seorang detektif yang memeriksa TKP. Mereka tidak hanya melihat kejadiannya, tetapi juga memeriksa jejak, sidik jari, dan bukti lainnya untuk memahami apa yang sebenarnya terjadi.
Mari kita lihat beberapa contoh kode:
class Person {
private $name;
public $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
private function sayHello(): string {
return "Hello, my name is " . $this->name;
}
}
$reflectionClass = new ReflectionClass('Person');
echo "Nama Kelas: " . $reflectionClass->getName() . "
";
echo "Properti:
";
foreach ($reflectionClass->getProperties() as $property) {
echo "- " . $property->getName() . " (" . ($property->isPrivate() ? "private" : "public") . ")
";
}
echo "Metode:
";
foreach ($reflectionClass->getMethods() as $method) {
echo "- " . $method->getName() . " (" . ($method->isPrivate() ? "private" : "public") . ")
";
}
Penjelasan:
ReflectionClass digunakan untuk merepresentasikan kelas Person.getName() mengembalikan nama kelas.getProperties() mengembalikan array properti kelas. Kita dapat memeriksa apakah properti tersebut private atau public.getMethods() mengembalikan array metode kelas. Kita juga dapat memeriksa visibilitas metode.
$person = new Person('John Doe', 30);
$reflectionClass = new ReflectionClass('Person');
$nameProperty = $reflectionClass->getProperty('name');
$nameProperty->setAccessible(true); // Penting! Membuat properti private dapat diakses
echo "Nama: " . $nameProperty->getValue($person);
Penjelasan:
ReflectionProperty untuk properti name.setAccessible(true) adalah kunci! Ini memungkinkan kita untuk mengakses properti private.getValue() mengembalikan nilai properti dari objek $person.
$person = new Person('Jane Doe', 25);
$reflectionClass = new ReflectionClass('Person');
$sayHelloMethod = $reflectionClass->getMethod('sayHello');
$sayHelloMethod->setAccessible(true);
echo $sayHelloMethod->invoke($person);
Penjelasan:
setAccessible(true) untuk membuat metode private dapat dipanggil.invoke() memanggil metode pada objek yang diberikan.Buat sebuah fungsi yang menerima nama kelas sebagai input dan mengembalikan array yang berisi nama semua properti dan metode kelas tersebut, beserta visibilitasnya (public, private, protected).