In PHP, an interface is an abstract class that defines a set of methods. We can ensure that a class has specific behavior by implementing an interface. However, sometimes we need to get a reference to a concrete type from a reference to an interface. This may cause some confusion in some cases. So, this article will show you how to get a reference to a concrete type from a reference to an interface. Whether you are a beginner or an experienced developer, this article will help you. Next, let’s get down to business and explore the solution to this problem.
I'm trying to understand how methods, interfaces and concrete types work in go.
For example, here.
My code is:
type i interface {mymethod(....)} type a struct{i i....} func (a *a) mymethod(....) { }
So a implements interface i.
In client code:
i := somefunction(....) // i is of type I i.MyMethod(....)
How to get the reference to a from i?
A set of method signatures is stored in the interface type. Any implementation of a method defined in an interface can be stored as its value.
If the variable is defined using an interface type, can access the methods defined in the interfaceand other methods associated with the implemented typecannot be accessed.
interface:
type i interface { value() string }
Implementation:
type a string func(a a) value() string { return string(a) } func (a a) type() string { return reflect.typeof(a).name() }
In client code:
// 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()
Note: If you use a pointer receiverimplementation method as shown below. You need to assign the implemented pointer to i
.
Implementation:
type a string func(a *a) value() string { return string(a) }
In client code:
a := A("a") var i I = &a
The above is the detailed content of How to get a reference to a concrete type from a reference to an interface. For more information, please follow other related articles on the PHP Chinese website!