Halo, Habr! Saya hadir untuk Anda terjemahan artikel "
Pengantar API PHP Refleksi " oleh
Mustafa Magdi .
Bagaimana cara menganalisis struktur data dalam PHP

Entri
Ketika saya mulai pemrograman dalam PHP, saya tidak tahu tentang kemampuan
API Refleksi . Alasan utamanya adalah saya tidak perlu mendesain kelas, modul, atau bahkan paket sederhana saya. Kemudian saya menemukan bahwa ini memainkan peran utama di banyak bidang. Dalam artikel ini, kami akan mempertimbangkan
API Refleksi pada poin-poin berikut:
- Apakah API Refleksi itu ?
- Instalasi dan konfigurasi
- Gunakan
- Kesimpulan
- Rekomendasi
1. Apa itu API Refleksi
Dalam ilmu komputer, refleksi atau refleksi (holonim dari introspeksi, refleksi bahasa Inggris) berarti suatu proses di mana program dapat melacak dan memodifikasi struktur dan perilaku sendiri saat runtime. - Wikipedia .
Apa arti dari kemampuan untuk berhenti dan melihat ke dalam kode Anda (
reverse-engineering ) artinya? Mari kita lihat cuplikan kode berikut:
class Profile { public function getUserName(): string { return 'Foo'; } }
Kelas
Profile adalah kotak hitam. Menggunakan
API Refleksi Anda dapat membaca apa yang ada di dalamnya:
Dengan demikian,
ReflectionClass bertindak sebagai analis untuk kelas
Profil kami, dan ini adalah gagasan utama
API Refleksi .
PHP memberi Anda kunci ke kotak apa pun yang dikunci, jadi kami memiliki kuncinya
untuk yang berikut ini:
ReflectionClass : melaporkan informasi kelas.
ReflectionFunction : melaporkan informasi fungsi.
ReflectionParameter : Mengambil informasi tentang parameter fungsi atau metode.
ReflectionClassConstant : melaporkan informasi konstanta kelas.
Anda dapat mempelajari daftar lengkapnya di
php.net2. Instalasi dan konfigurasi
Untuk menggunakan kelas-kelas
API Refleksi , tidak perlu menginstal atau mengkonfigurasi apa pun, karena mereka adalah bagian dari inti PHP.
3. Contoh penggunaan
Berikut ini adalah beberapa contoh bagaimana kami dapat menggunakan
API Refleksi :
Contoh 1:Dapatkan kelas induk untuk kelas tertentu:
Contoh 2:Dapatkan dokumentasi untuk metode
getUserName()
:
$method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */"
Contoh 3:Itu dapat digunakan sebagai
instanceOf
dan
is_a()
untuk memvalidasi objek:
$class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj));
Contoh 4:Dalam beberapa situasi, Anda mungkin terjebak dengan pengujian unit dan bertanya-tanya, "Bagaimana saya bisa menguji fungsi pribadi?!"
Jangan khawatir, inilah triknya:
Contoh sebelumnya cukup sederhana, tetapi ada contoh lain di mana Anda dapat melihat bagaimana
API Refleksi digunakan secara lebih luas:
- Pembuat dokumentasi API : paket lavarel-apidoc-generator menggunakan ReflectionClass dan ReflrectionMethod secara luas untuk mendapatkan dan selanjutnya memproses informasi tentang blok dokumentasi untuk kelas dan metode, dan untuk menata blok kode ini.
- Dependency Injection Container : Anda dapat memeriksa seluruh topik di sini
4. Kesimpulan
PHP menyediakan
API Refleksi lengkap yang membantu Anda dengan mudah menjangkau berbagai area struktur OOP.
5. Referensi
Dari penerjemah:Anda juga dapat melihat contoh menggunakan API Refleksi dalam paket Codeception di kelas Stub .
Kelas ini melalui refleksi membantu mencelupkan metode dan properti dalam pengujian unit.
Harus ditambahkan bahwa API Refleksi bekerja agak lambat, jadi Anda tidak boleh terlalu terlibat. Disarankan untuk digunakan dalam tes atau selama debugging, tetapi jika Anda bisa melakukannya tanpa itu, maka lebih baik untuk melakukannya. Dan itu pasti tidak direkomendasikan untuk digunakan dalam kode kerja proyek, seperti itu juga tidak aman.