php小編魚仔將為大家介紹如何定義有屬性的介面。在PHP中,介面是一種約定,用來定義類別應該實作的方法。然而,有時候我們也需要在介面中定義屬性。要定義具有屬性的接口,我們可以使用常數來模擬屬性,並在實作接口的類別中進行賦值。這樣,我們就可以在介面中定義和使用屬性了。接下來,讓我們來看看具體的實作方法。
我有一個問題:是否可以為線性空間設定介面?
讓我提醒一下,在線性空間l中,存在元素相加和元素乘以數字的運算。此外,還滿足兩個屬性:
1)l 中的 a b
2)l 中的ak,其中 k - 標量
我以以下形式呈現了線性空間的介面:
type Point interface { } type LinSpace interface { Sum(x, y Point) Prod(x Point, k float64) }
如何在介面定義中考慮上述兩個屬性?
介面只能包含方法。
你可以這樣做:
// 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, } }
然後您可以在主(或其他)函數中執行此操作:
// Use any float values ls := NewLinSpace(11.2, 24.7) fmt.Println(ls.Sum()) // 35.9 fmt.Println(ls.Prod(30.2)) // 338.23999999999995
這就是「oop」在 go 中的工作原理。
以上是如何定義帶有屬性的介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!