听说PHP中有个东西叫Trait

在Laravel文档中经常出现这个让我郁闷的词汇,在群里问了一下才知道这东西不是laravel所有,而是php内容。于是去php官方文档查看,看的一脸懵逼。想想还是直接借助Google,php trait是什么?

搜索第二条就是安正超大牛的博客,很短,稍微看一下就基本能理解了。trait是php5.4加入的一种用于代码复用的语法,类也用于复用,也就是说这东西和类的作用是相似的,包括书写方式也类似。

  • 据我所知的面向对象语言中只有C++明确支持多继承,那么java,php这些只有单继承的语言怎么办?由于有些类是要实现接口的,java的做法是普通类之间不能多继承,但可以继承多个接口。

  • php实现这个多继承就是用Trait特征,意思很简单,根据一定的特征把重复的方法放在一个文件,这个文件就叫做一个trait,然后use引入这个Trait就能使用了,可以同时引入多个特征。那么到底根据什么特征来区别呢?这就是Trait复用的思考重点了。

  • 一个类很多乱七八糟的属性和方法,你可以根据价格,根据地区划分出多个Trait,需要的时候随意组合起来使用,和依赖注入的原理非常像,耦合度很低,类似于composer组件化思想。

  • 安大神也认为Trait分类拆分会是大家碰到最头疼的问题,他给出三个拆分技巧:

1
2
3
4
5
6
7
从需求或功能描述拆分,而不是写了两段代码发现代码一样就提到一起;
拆分时可能需要将某些属性也一起带走;
拆分时如果给 Trait 起名困难时,请认真思考你是否真的拆分对了。
因为正确的拆分是很容易描述 “它是一个具有什么功能的特性” 的;
坚持原创技术分享,您的支持将鼓励我继续创作!
0%