En PHP, une interface est une classe abstraite qui définit un ensemble de méthodes. Nous pouvons garantir qu'une classe a un comportement spécifique en implémentant une interface. Cependant, nous avons parfois besoin d’obtenir une référence à un type concret à partir d’une référence à une interface. Cela peut créer une certaine confusion dans certains cas. Ainsi, cet article va vous montrer comment obtenir une référence à un type concret à partir d’une référence à une interface. Que vous soyez débutant ou développeur expérimenté, cet article vous aidera. Passons ensuite aux choses sérieuses et explorons la solution à ce problème.
J'essaie de comprendre comment fonctionnent les méthodes, les interfaces et les types concrets.
Par exemple, ici.
Mon code est :
type i interface {mymethod(....)} type a struct{i i....} func (a *a) mymethod(....) { }
Donc, une interface implémente i.
Dans le code client :
i := somefunction(....) // i is of type I i.MyMethod(....)
Comment obtenir une référence à a depuis i ?
Un ensemble de signatures de méthode est stocké dans un type d'interface. Toute implémentation d'une méthode définie dans une interface peut être stockée comme valeur.
Si une variable est définie à l'aide d'un type d'interface, peut accéder aux méthodes définies dans l'interface et les autres méthodes associées au type implémenté ne sont pas accessibles .
Interface :
type i interface { value() string }
Mise en œuvre :
type a string func(a a) value() string { return string(a) } func (a a) type() string { return reflect.typeof(a).name() }
Dans le code client :
// 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()
Remarque : Si vous utilisez la méthode d'implémentation Pointer Receiver comme indiqué ci-dessous. Vous devez attribuer le pointeur implémenté à i
.
Mise en œuvre :
type a string func(a *a) value() string { return string(a) }
Dans le code client :
a := A("a") var i I = &a
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!