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.
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) }
Bagaimana untuk mempertimbangkan dua sifat di atas dalam definisi antara muka?
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, } }
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
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!