Dalam PHP, antara muka ialah kelas abstrak yang mentakrifkan satu set kaedah. Kita boleh memastikan bahawa kelas mempunyai tingkah laku tertentu dengan melaksanakan antara muka. Walau bagaimanapun, kadangkala kita perlu mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka. Ini mungkin menyebabkan kekeliruan dalam sesetengah kes. Jadi, artikel ini akan menunjukkan kepada anda cara mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan membantu anda. Seterusnya, mari kita turun ke perniagaan dan terokai penyelesaian kepada masalah ini.
Saya cuba memahami cara kaedah, antara muka dan jenis konkrit berfungsi semasa.
Sebagai contoh, di sini.
Kod saya ialah:
type i interface {mymethod(....)} type a struct{i i....} func (a *a) mymethod(....) { }
Jadi antara muka melaksanakan i.
Dalam kod pelanggan:
i := somefunction(....) // i is of type I i.MyMethod(....)
Bagaimana untuk mendapatkan rujukan kepada a daripada i ?
Satu set tandatangan kaedah disimpan dalam jenis antara muka. Sebarang pelaksanaan kaedah yang ditakrifkan dalam antara muka boleh disimpan sebagai nilainya.
Jika pembolehubah ditakrifkan menggunakan jenis antara muka, boleh mengakses kaedah yang ditakrifkan dalam antara muka dan kaedah lain yang dikaitkan dengan jenis yang dilaksanakan tidak boleh diakses .
Antaramuka:
type i interface { value() string }
Perlaksanaan:
type a string func(a a) value() string { return string(a) } func (a a) type() string { return reflect.typeof(a).name() }
Dalam kod pelanggan:
// define a variable with the type of i. var a i = a("a") // method value() defined in the i interface can be // called. value := a.value() // method type() can not be called, because it is not defined in the interface. typ := a.type()
Nota: Jika anda menggunakan Penerima Penunjukkaedah pelaksanaan seperti yang ditunjukkan di bawah. Anda perlu menetapkan penunjuk yang dilaksanakan kepada i
.
Perlaksanaan:
type a string func(a *a) value() string { return string(a) }
Dalam kod pelanggan:
a := A("a") var i I = &a
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!