Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Dapatkan refleksi.Jenis jenis berdasarkan jenis primitif

Dapatkan refleksi.Jenis jenis berdasarkan jenis primitif

WBOY
WBOYke hadapan
2024-02-09 15:12:09524semak imbas

Dapatkan refleksi.Jenis jenis berdasarkan jenis primitif

Dalam pengaturcaraan PHP, mendapatkan refleksi. Jenis jenis berdasarkan jenis primitif ialah kemahiran penting. reflect.Kind ialah harta dalam perpustakaan kelas refleksi yang disediakan oleh PHP, yang boleh digunakan untuk menentukan jenis data pembolehubah. Dengan menggunakan reflect.Kind, kita boleh mendapatkan jenis pembolehubah dengan mudah dan melaksanakan operasi dan pemprosesan yang sepadan. Bagi pembangun PHP, menguasai kemahiran ini akan membantu memahami dan menggunakan mekanisme pantulan dengan lebih baik, serta meningkatkan kebolehbacaan dan fleksibiliti kod. Dalam artikel ini, editor PHP Baicao akan memperkenalkan secara terperinci cara mendapatkan refleksi. Jenis berdasarkan jenis primitif, dan berkongsi beberapa contoh dan teknik praktikal untuk membantu pembaca menguasai perkara pengetahuan ini dengan lebih baik.

Kandungan soalan

Saya ingin menggunakan reflect.kind sebagai reflect.interface untuk jenis yang melaksanakan antara muka, tetapi pelaksanaannya berdasarkan jenis primitif: type id string

Jawapan lain untuk soalan ini mungkin ialah cara mendapatkan reflect.type dari sebarang jenis yang mengembalikan reflect.interfaces apabila memanggil kind().

Berikut ialah contoh lengkap taman permainan semasa dalam perjalanan:

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))
    
    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))
    
    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}

Penyelesaian

reflect.typeof() (和 reflect.valueof()) 需要一个 接口{}。基本上,无论您传递给 reflect.typeof() 的值是什么,如果它还不是接口值,它将隐式包装在 interface{} 中。如果传递的值已经是接口值,则其中存储的具体值将作为 interface{} Teruskan.

Untuk mengelakkan "pembungkusan semula" ini, yang merupakan salah satu kes yang jarang berlaku di mana penunjuk kepada antara muka masuk akal, sebenarnya anda tidak boleh mengelaknya di sini. Anda mesti menghantar penunjuk kepada nilai antara muka.

Jadi jika anda menghantar penuding ke antara muka, penuding akan dibalut interface{} 值中。您可以使用 type.elem() untuk mendapatkan deskriptor jenis "titik-ke-jenis": iaitu jenis elemen jenis penunjuk, yang akan menjadi deskriptor jenis bagi jenis antara muka yang anda cari. p>

Contoh:

id := id(id("test"))

fmt.println(id)
t := reflect.typeof(&id).elem()
fmt.println(t)

fmt.println(t.kind())

Apakah hasil (cuba di pergi taman permainan):

test
main.ID
interface

Lihat soalan berkaitan: Apakah perbezaan antara reflect.valueof() dan value.elem() in go?

Atas ialah kandungan terperinci Dapatkan refleksi.Jenis jenis berdasarkan jenis primitif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam