面试-PHP篇-trait

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

traits 与 interfaces 区别 及 traits 解决了什么痛点?

知乎一个有趣的比喻:

你可以把trait当作是多继承的一种变种,是一种加强型的接口,比如当你需要定义一个car的class,此时你需要实现vehicle定义的接口,比如必须有引擎,有外壳这些,但你这时会发现每个都自己去实现是不是太复杂了?比如对你而言引擎的实现你并不关心,你只要买一个用就好了,你比较在意汽车的外形,那么这时候就用到了trait,他替你封装好了引擎的相关实现,因此你只要关心怎么使引擎动起来即可,不用自己去实现。当然换一种方法也是能实现的,比如你把engine作为一个类的属性,然后使用时new一个封装好的engine类也是可以的,只是用trait更方便。

从方便偷懒的角度来说:

Interface只给了些方法名字,方法还得靠自己全部实现,方便个屁。而trait拿来就可以直接使用了,这才舒服嘛。

一个外国小哥这样描述trait:

Trait本质上是语言辅助的复制和粘贴。即使用trait相当于把它封装的方法代码复制粘贴到此处。

traits 解决了什么痛点:(摘自PHP官方文档)

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

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章