在PHP中,接口是一种定义了一组方法的抽象类。我们可以通过实现接口来保证类具有特定的行为。然而,有时候我们需要从对接口的引用中获取对具体类型的引用。这在某些情况下可能会导致一些困惑。所以,本文将向大家介绍如何从对接口的引用中获取对具体类型的引用。无论您是初学者还是有一定经验的开发者,本文都将对您有所帮助。接下来,让我们进入正题,一起探索这个问题的解决方案。
问题内容
我试图了解 go 中的方法、接口和具体类型是如何工作的。
比如,这里。
我的代码为:
type i interface {mymethod(....)}type a struct{i i....} func (a *a) mymethod(....) {}
登录后复制
所以a实现了接口i。
在客户端代码中:
i := somefunction(....) // i is of type Ii.MyMethod(....)
登录后复制
如何从 i 获取对 a 的引用?
解决方法
一组方法签名存储在接口类型中。 接口中定义的方法的任何实现都可以存储为其值。
如果变量是使用接口类型定义的,可以访问接口中定义的方法以及与实现的类型关联的其他方法无法访问。
界面:
type i interface { value() string}
登录后复制
实施:
type a stringfunc(a a) value() string { return string(a)}func (a a) type() string { return reflect.typeof(a).name()}
登录后复制
在客户端代码中:
// 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()
登录后复制
注意:如果使用指针接收器实现方法,如下所示。您需要将实现的指针分配给i。
实施:
type a stringfunc(a *a) value() string { return string(a)}
登录后复制
在客户端代码中:
a := A("a") var i I = &a
登录后复制
以上就是如何从对接口的引用中获取对具体类型的引用的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2356887.html