Heim  >  Artikel  >  Backend-Entwicklung  >  Wie definiere ich eine Schnittstelle mit Eigenschaften?

Wie definiere ich eine Schnittstelle mit Eigenschaften?

PHPz
PHPznach vorne
2024-02-10 22:30:09683Durchsuche

Wie definiere ich eine Schnittstelle mit Eigenschaften?

php-Editor Yuzai zeigt Ihnen, wie Sie eine Schnittstelle mit Attributen definieren. In PHP ist eine Schnittstelle eine Konvention, die die Methoden definiert, die eine Klasse implementieren soll. Manchmal müssen wir jedoch auch Eigenschaften in der Schnittstelle definieren. Um eine Schnittstelle mit Eigenschaften zu definieren, können wir Konstanten verwenden, um Eigenschaften zu simulieren und Werte in der Klasse zuzuweisen, die die Schnittstelle implementiert. Auf diese Weise können wir Eigenschaften in der Schnittstelle definieren und verwenden. Schauen wir uns als Nächstes die spezifische Implementierungsmethode an.

Frageninhalt

Ich habe eine Frage: Ist es möglich, eine Schnittstelle für einen linearen Raum einzurichten?

Ich möchte Sie daran erinnern, dass es im linearen Raum l Operationen zum Addieren von Elementen und Multiplizieren von Elementen mit Zahlen gibt. Darüber hinaus erfüllt es auch zwei Eigenschaften:

1) a+b in l

2) ak in l, wobei k - Skalar

Ich stelle die Schnittstelle für den linearen Raum in folgender Form vor:

type Point interface {
}

type LinSpace interface {
    Sum(x, y Point)
    Prod(x Point, k float64)
}

Wie berücksichtigt man die beiden oben genannten Eigenschaften in der Schnittstellendefinition?

Lösung

Schnittstellen können nur Methoden enthalten.

Sie können dies tun:

// 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,
        }
    }

Sie können dies dann in Ihrer Hauptfunktion (oder einer anderen Funktion) tun:

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

So funktioniert „oop“ in go.

Das obige ist der detaillierte Inhalt vonWie definiere ich eine Schnittstelle mit Eigenschaften?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen