Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?

PHPz
Lepaskan: 2024-02-09 20:30:10
ke hadapan
769 orang telah melayarinya

Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?

Dalam PHP, jika kita ingin menggunakan struktur tersuai untuk menentukan fungsi biasa tanpa perlu menyenaraikan semua struktur, terdapat cara yang cekap untuk melakukannya. Pendekatan ini dicapai dengan menggunakan bilangan parameter yang berubah-ubah. Kami boleh menerima sebarang bilangan parameter dengan menggunakan elips (...) sebagai nama parameter dalam definisi fungsi. Dalam badan fungsi, kita boleh menggunakan fungsi func_get_args() untuk mendapatkan semua hujah yang dihantar ke fungsi tersebut. Dengan cara ini, kita boleh menggunakan parameter ini di dalam fungsi tanpa mentakrifkan semua struktur terlebih dahulu. Pendekatan fleksibel ini boleh membantu kami menulis fungsi yang lebih umum dan boleh diguna semula serta meningkatkan kecekapan pengekodan.

Kandungan soalan

Andaikan saya mempunyai dua struktur berbeza:

type one struct {
  id string
  // other fields
}

type two struct {
  id string
  // other fields
}
Salin selepas log masuk

Adakah mungkin untuk menentukan fungsi yang menerima kedua-duanya onetwo tanpa menyenaraikannya secara jelas sebagai pilihan?

Sebagai contoh saya sedang mencari sesuatu seperti ini:

type ModelWithId struct {
  Id string
}

func Test[M ModelWithId](m M) {
  fmt.PrintLn(m.Id)
}

one := One { Id: "1" }
Test(one) // Prints 1
Salin selepas log masuk

Saya tidak mahu menggunakan functest[m one |两个](m m) kerana saya mungkin mempunyai 10+ struct dan saya tidak mahu perlu kembali ke fungsi itu setiap kali saya menambah struct baharu pada pangkalan kod.

Penyelesaian

Generik menggunakan kaedah untuk mengekang tingkah laku parameter jenis, jadi anda perlu menulis semula kod anda sebagai:

type one struct {
    id string
}

func (o *one) id() string {
    return o.id
}
Salin selepas log masuk

Kemudian tapak penggunaan anda akan menjadi:

type ModelWithId interface {
    Id() string
}

func Test[M ModelWithId](m M) {
    fmt.Println(m.Id())
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh menentukan fungsi generik menggunakan struktur tersuai tanpa menyenaraikan semua struktur?. 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!