Saya memiliki beberapa CONST yang didefinisikan pada beberapa kelas, dan ingin mendapatkan daftar mereka. Sebagai contoh:
class Profile {
const LABEL_FIRST_NAME = "First Name";
const LABEL_LAST_NAME = "Last Name";
const LABEL_COMPANY_NAME = "Company";
}
Apakah ada cara untuk mendapatkan daftar CONST yang ditentukan di Profile
kelas? Sejauh yang saya tahu, opsi terdekat ( get_defined_constants()
) tidak akan berhasil.
Apa yang sebenarnya saya butuhkan adalah daftar nama konstan - sesuatu seperti ini:
array('LABEL_FIRST_NAME',
'LABEL_LAST_NAME',
'LABEL_COMPANY_NAME')
Atau:
array('Profile::LABEL_FIRST_NAME',
'Profile::LABEL_LAST_NAME',
'Profile::LABEL_COMPANY_NAME')
Atau bahkan:
array('Profile::LABEL_FIRST_NAME'=>'First Name',
'Profile::LABEL_LAST_NAME'=>'Last Name',
'Profile::LABEL_COMPANY_NAME'=>'Company')
php
constants
class-constants
Brock Boland
sumber
sumber
Jawaban:
Anda dapat menggunakan Refleksi untuk ini. Perhatikan bahwa jika Anda sering melakukan ini, Anda mungkin ingin melihat caching hasilnya.
Keluaran:
sumber
Profile
dapat digunakan sebagai argumen untuk konstruktor reflektor, tanpa tanda kutip (nama kelas sederhana); kedua, agar sepenuhnya jelas, kunci array yang dihasilkan adalah string, bukan konstanta karena pemformatan di sini mungkin diambil untuk menyarankan. (Layak disebutkan hanya karena fn tidak berdokumen .)Profile
tanpa tanda kutip, karena akan menampilkan kesalahan berikut: Pemberitahuan: Penggunaan Profil konstan yang tidak terdefinisi - diasumsikan 'Profil'. Jadi saya sarankan menyimpan tanda kutip'Profile'
__CLASS__
sebagai gantinya.new ReflectionClass(Profile::class)
berfungsi dengan baik jugaCity
dengan kelasB
-B::class
akan berfungsi dengan baik, tetapi jika Anda akan menggunakan namespace misalnyaJungle
- memanggil keB::class
sana tanpa menyertakannyause
akan menghasilkanJungle\B
(walaupun Jungle TIDAK memiliki B sama sekali!)Ini
sumber
types
sebagaiall constants this class has
, yang dalam kebanyakan kasus, dan menurut pendapat saya yang terbatas, mungkin lebih baik dilayani dengan pewarisan atau variabel array statis dengan tipe (meninggalkan ruang untuk konstanta dengan makna lain / menggunakan).Gunakan token_get_all () . Yaitu:
Keluaran:
sumber
Di PHP5 Anda dapat menggunakan Reflection: (referensi manual)
sumber
Per komentar dokumen PHP, jika Anda dapat menggunakan ReflectionClass (PHP 5):
Sumber ada di sini.
sumber
Menggunakan ReflectionClass dan
getConstants()
memberikan apa yang Anda inginkan:Keluaran:
sumber
Ciri dengan metode statis - untuk menyelamatkan
Sepertinya itu adalah tempat yang bagus untuk menggunakan Ciri-ciri dengan fungsi statis untuk memperluas fungsionalitas kelas. Ciri juga akan memungkinkan kami menerapkan fungsi ini di kelas lain tanpa menulis ulang kode yang sama berulang-ulang (tetap KERING).
Gunakan sifat 'ConstantExport' khusus kami dengan di kelas Profil. Lakukan untuk setiap kelas yang Anda perlukan fungsi ini.
CONTOH PENGGUNAAN
OUTPUT:
sumber
Ya, Anda menggunakan refleksi . Lihatlah output dari
Itu akan memberi Anda gagasan tentang apa yang akan Anda lihat.
sumber
Sangat berguna untuk memiliki metode di dalam kelas untuk mengembalikan konstanta sendiri.
Anda bisa melakukan ini:
sumber
Mengapa tidak menempatkan mereka dalam variabel kelas sebagai array untuk memulai? Mempermudah untuk mengulang melalui.
sumber
Akhirnya dengan ruang nama:
sumber
sumber