Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka

王林
Lepaskan: 2024-02-09 16:39:14
ke hadapan
891 orang telah melayarinya

Bagaimana untuk mendapatkan rujukan kepada jenis konkrit daripada rujukan kepada antara muka

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.

Kandungan soalan

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(....) {
}
Salin selepas log masuk

Jadi antara muka melaksanakan i.

Dalam kod pelanggan:

i := somefunction(....) // i is of type I
i.MyMethod(....)
Salin selepas log masuk

Bagaimana untuk mendapatkan rujukan kepada a daripada i ?

Penyelesaian

  • 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
}
Salin selepas log masuk

Perlaksanaan:

type a string

func(a a) value() string {
    return string(a)
}

func (a a) type() string {
 return  reflect.typeof(a).name()
}

Salin selepas log masuk

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()

Salin selepas log masuk

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)
}
Salin selepas log masuk

Dalam kod pelanggan:

 a := A("a")
 var i I = &a 
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!