In PHP ist eine Schnittstelle eine abstrakte Klasse, die eine Reihe von Methoden definiert. Durch die Implementierung einer Schnittstelle können wir sicherstellen, dass eine Klasse ein bestimmtes Verhalten aufweist. Manchmal müssen wir jedoch von einer Referenz auf eine Schnittstelle eine Referenz auf einen konkreten Typ erhalten. Dies kann in einigen Fällen zu Verwirrung führen. In diesem Artikel erfahren Sie, wie Sie aus einer Referenz auf eine Schnittstelle eine Referenz auf einen konkreten Typ erhalten. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel wird Ihnen helfen. Kommen wir als Nächstes zur Sache und erkunden die Lösung für dieses Problem.
Ich versuche zu verstehen, wie Methoden, Schnittstellen und konkrete Typen in go funktionieren.
Zum Beispiel hier.
Mein Code ist:
type i interface {mymethod(....)} type a struct{i i....} func (a *a) mymethod(....) { }
Also implementiert eine Schnittstelle i.
Im Kundencode:
i := somefunction(....) // i is of type I i.MyMethod(....)
Wie bekomme ich eine Referenz zu einem von i?
Eine Reihe von Methodensignaturen wird in einem Schnittstellentyp gespeichert. Jede Implementierung einer Methode , die in einer Schnittstelle definiert ist, kann als ihr Wert gespeichert werden.
Wenn eine Variable mithilfe eines Schnittstellentyps definiert ist, kann auf Methoden zugegriffen werden, die in der Schnittstelle definiert sind, und auf andere Methoden , die mit dem implementierten Typ verknüpft sind kann nicht zugegriffen werden .
Schnittstelle:
type i interface { value() string }
Umsetzung:
type a string func(a a) value() string { return string(a) } func (a a) type() string { return reflect.typeof(a).name() }
Im Kundencode:
// define a variable with the type of i. var a i = a("a") // method value() defined in the i interface can be // called. value := a.value() // method type() can not be called, because it is not defined in the interface. typ := a.type()
Hinweis: Wenn Sie die Pointer ReceiverImplementierungsmethode wie unten gezeigt verwenden. Sie müssen den implementierten Zeiger i
zuweisen.
Umsetzung:
type a string func(a *a) value() string { return string(a) }
Im Kundencode:
a := A("a") var i I = &a
Das obige ist der detaillierte Inhalt vonSo erhalten Sie einen Verweis auf einen konkreten Typ aus einem Verweis auf eine Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!