Apakah ada refleksi / introspeksi / keajaiban dalam PHP yang akan memungkinkan Anda menemukan file PHP di mana kelas (atau fungsi) tertentu didefinisikan?
Dengan kata lain, saya memiliki nama kelas PHP, atau objek yang dipakai. Saya ingin meneruskan ini ke sesuatu (fungsi, kelas Refleksi, dll.) Yang akan mengembalikan jalur sistem file tempat kelas itu didefinisikan.
/path/to/class/definition.php
Saya menyadari bahwa saya dapat menggunakan ( get_included_files())
untuk mendapatkan daftar semua file yang telah disertakan sejauh ini dan kemudian mengurai semuanya secara manual, tetapi itu banyak akses sistem file untuk satu upaya.
Saya juga menyadari bahwa saya dapat menulis beberapa kode tambahan dalam mekanisme __autoload kami yang menyimpan informasi ini di suatu tempat. Namun, mengubah __autoload yang ada adalah terlarang dalam situasi yang saya pikirkan.
Mendengar tentang ekstensi yang dapat melakukan hal ini akan menarik, tetapi pada akhirnya saya ingin sesuatu yang dapat berjalan pada pemasangan "stok".
sumber
Jawaban:
Mencoba
ReflectionClass
Contoh:
Ini akan dikembalikan
false
ketika nama file tidak dapat ditemukan, misalnya pada kelas asli.sumber
Untuk ReflectionClass dalam file dengan namespace , tambahkan awalan "\" untuk membuatnya global sebagai berikut:
Atau yang lain, itu akan menghasilkan kesalahan kata ReflectionClass di namespace tidak ditentukan. Saya tidak berhak memberikan komentar untuk jawaban di atas, jadi saya menulis ini sebagai jawaban pelengkap.
sumber
jika Anda memiliki folder termasuk, Anda dapat menjalankan perintah skrip shell ke "grep" untuk "class $ className" dengan melakukan:
$filename = ``grep -r "class $className" $includesFolder/*\
dan itu akan mengembalikan file mana itu masuk Selain itu, saya tidak berpikir ada keajaiban fungsi untuk PHP melakukannya untuk ya.sumber