php中interface和trait的异同?

发布于 2022-09-11 21:36:28 字数 544 浏览 16 评论 0

trait trait_name{
    public function function_name();
}
interface interface_name{
    public function function_name();
}
  1. 在学php, 没实际经验, 感觉interface和trait很类似, 都是一种特殊的类.
  2. 等到需要的时候, 在当前类中写清具体方法, 在通过implement, extends, use等去调用它们.
  3. 这两种设计有什么精妙之处? 有什么区别呢?
  4. 看了下各种回答, 觉得挺有道理. trait和interface恰好相反,interface关心的是接口,把控全局, 把实现和细节丢给其他人,而trait完全不关心接口(约定),trait内部写好具体的功能细节, 其他人谁要用use引入就行. (正所谓复用代码). 而trait的"多继承", 在一个类中引入多个trait, 又进一步强化了"复用代码".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

剩余の解释 2022-09-18 21:36:28
  • trait 必须实现方法体 , interface 不能实现方法体。
  • trait 可以预定义类成员,但是成员不能被调用者覆盖,必须有相同的初始化参数。
  • interface 不允许预定义成员。
  • 一个类可以实现多个 interface ,也可以使用多个 trait 。从另一个角度来讲,trait 是为了来解决不能多继承的。
  • abstract 介于两者之间。
拒绝两难 2022-09-18 21:36:28

interface和trait 是2个不一样的东西
interface 用来定义接口标准,都是抽象类。比如你可以定义一个 people 的interface ,里面规定了只能定义一下 people 相关的方法。

trait 的是为了解决多继承问题的,因为php 不支持多继承。

灼疼热情 2022-09-18 21:36:28

完全是两个东西

trait 设计的初衷是使用组合来扩展类的行为,而不是继承,因为PHP只支持单继承有局限性
interface是限定子类的行为
痴者 2022-09-18 21:36:28

interface是为了规范标准,在强类型语言里非常有用。
trait是为了代码复用

誰ツ都不明白 2022-09-18 21:36:28

不知道你是从何得知的,

trait,在里面定义好方法名但不用写具体细节

请多看文档

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文