trait 超详细解析,附源码

自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。

共用的一些属性和方法提取出来做公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入就可以了,相当于把trait中的代码复制到当前类中.
因为trait不是类,所以不能有静态成员,类常量,当然也不可能被实例化。

如果说:继承可以纵向扩展一个类,那么trait就是横向扩展一个类功能

通俗点讲:trait就是为了代码复用而生
例一:创建两个trait类,并使用。(trait类不仅可以定义方法,也可以定义属性)
在这里插入图片描述
输出结果:
在这里插入图片描述
例二:trait类也可以相互嵌套,一个trait直接使用use引用另一个trait类就行(
此处只需要在例一中的test2类中use test1,并去掉classname 类中对test1的引用,代码如下

在这里插入图片描述
代码输出结果:
在这里插入图片描述
例三、trait类不影响继承父类,但是 如果trait类中存在和父类同名的方法时,返回结果为trait类的方法返回值(trait类的优先级比父类高)
在这里插入图片描述
代码执行结果(父类和trait类中都有aa方法的时候,优先使用trait类中的方法):
在这里插入图片描述
例四:当本类,trait类和父类都哈有同名方法时,优先使用本类的方法(优先级 : 本类>trait类>父类)
在这里插入图片描述
输出结果:
在这里插入图片描述
例五:如果两个trait类中含有同名方法
在这里插入图片描述
执行结果:
在这里插入图片描述
解决办法:
在这里插入图片描述
执行结果:
在这里插入图片描述
也可以为同名方法起别名
在这里插入图片描述
执行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值