Bagaimana untuk menentukan antara muka dengan sifat?

PHPz
Lepaskan: 2024-02-10 22:30:09
ke hadapan
685 orang telah melayarinya

Bagaimana untuk menentukan antara muka dengan sifat?

editor php Yuzai akan memperkenalkan kepada anda cara untuk menentukan antara muka dengan atribut. Dalam PHP, antara muka ialah konvensyen yang mentakrifkan kaedah yang harus dilaksanakan oleh kelas. Walau bagaimanapun, kadangkala kita juga perlu menentukan sifat dalam antara muka. Untuk menentukan antara muka dengan sifat, kita boleh menggunakan pemalar untuk mensimulasikan sifat dan memberikan nilai dalam kelas yang melaksanakan antara muka. Dengan cara ini, kita boleh menentukan dan menggunakan sifat dalam antara muka. Seterusnya, mari kita lihat kaedah pelaksanaan khusus.

Kandungan soalan

Saya ada soalan: adakah mungkin untuk menyediakan antara muka untuk ruang linear?

Izinkan saya mengingatkan anda bahawa dalam ruang linear l, terdapat operasi menambah unsur dan mendarab unsur dengan nombor. Selain itu, ia juga memenuhi dua sifat:

1) a+b dalam l

2) ak dalam l, di mana k - skalar

Saya membentangkan antara muka untuk ruang linear dalam bentuk berikut:

type Point interface {
}

type LinSpace interface {
    Sum(x, y Point)
    Prod(x Point, k float64)
}
Salin selepas log masuk

Bagaimana untuk mempertimbangkan dua sifat di atas dalam definisi antara muka?

Penyelesaian

Antara muka hanya boleh mengandungi kaedah.

Anda boleh melakukan ini:

// effective go says: interface names should contain prefix -er 
    type linspacer interface {
        sum() float64
        prod(k float64) float64
    }
    
    // struct that implements interface
    type linspaceimpl struct {
        a float64
        b float64
    }
    
    // implementation of sum() method
    // also, you don't need to pass a and b vars
    // because they're already exist in linspaceimpl
    func (l *linspaceimpl) sum() float64 {
        return l.a + l.b
    }
    
    // implementation of prod() method
    // unlike the sum() method, here we need extra param - k
    // so it has to be passed, or you can add it to
    // linspaceimpl as another fields but it doesn't
    // make any sense though
    func (l *linspaceimpl) prod(k float64) float64 {
        return l.a * k
    }
    
    // unnecessary "constructor" to optimize your main function
    // and clarify code
    func newlinspace(a, b float64) linspacer {
    // since linspaceimpl correctly implements linspacer interface
    // you can return instance of linspaceimpl as linspacer
        return &linspaceimpl{
            a: a,
            b: b,
        }
    }
Salin selepas log masuk

Anda kemudian boleh melakukan ini dalam fungsi utama anda (atau yang lain):

// Use any float values
    ls := NewLinSpace(11.2, 24.7)
    
    fmt.Println(ls.Sum())      // 35.9
    fmt.Println(ls.Prod(30.2)) // 338.23999999999995
Salin selepas log masuk

Beginilah cara "oop" berfungsi.

Atas ialah kandungan terperinci Bagaimana untuk menentukan antara muka dengan sifat?. 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