从PHP5.4.0起,PHP实现了代码复用的一个方法,称为traits。
traits试图用来解决像PHP这样的面向对象语言中只支持单继承的问题。它的作用是允许我们在不使用继承的情况下为一个类增加功能。
要创建一个trait,需要使用trait关键字,后面跟着它的名字和定义。
trait tSomeTrait{
function someFunction(){
// Do Whatener
}
}

像一个接口或者是一个抽象类一样,trait是不能被初始化的,也就是说,我不能从一个trait创建一个对象。然而我们可以通过使用use关键字在一个类的定义中为这个类增加一个trait。

class SomeClass{
use tSomeTrait;
//Rest of class
}

就像在一个PHP脚本中使用include包含一个外部的PHP脚本就能使其马上生效了一样,在这里增加一个use traitName语句就能够使这个trait的代码对当前类生效,、。

然后,当我们像之前那样子定义完了之后,当我们创建了一个类的时候,这个对象就有了somefunction()方法:
$obj = new SomeClass();
$obj->someFunction();
这样就可以实现了代码复用。
 
值得注意的是:traits看上去和接口有很多地方十分相似,但是两者其实有天壤之别。一个接口会强制执行更严格的编程规则,一边类被设计为实现特定的方法。相反的,一个trait使方法对一个类可用,即便它没有出现在类中被定义。
应用场景:在解决一些比较少见的面向对象编程的问题的时候,使用trait可能很有用,但是,traits也可能被误用在某些本来有其他更好的解决方法的场合。

最新文章

  1. 关于Spring中配置LocalSessionFactoryBean来生成SessionFactory
  2. Linux-文件和目录操作命令
  3. Google Chrome 调试
  4. OpenCascade Modeling Algorithms Fillets and Chamfers
  5. hdu.5211.Mutiple(数学推导 && 在logn的时间内求一个数的所有因子)
  6. checkbox全选和子选
  7. Linux网络编程echo多线程服务器
  8. SEO为什么越来越难?
  9. java中|与||有什么区别?那么&与&&呢
  10. Spark 作业调度相关术语
  11. ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
  12. 201621123068 Week03-面向对象入门
  13. C#创建控制台项目引用Topshelf的方式,部署windows服务。
  14. spring boot (1):初尝
  15. 使用vuejs做一个todolist
  16. CentOS6.5安装Elasticsearch1.7.5
  17. Vivado HLS初识---阅读《vivado design suite tutorial-high-level synthesis》(3)
  18. log4js_Node.js中的日志管理模块使用
  19. mybatis Mapper XML 映射文件
  20. ubuntu(14.04) 网路管理

热门文章

  1. 软件工程项目之摄影App
  2. 3-palindrome CodeForces - 805B (思维)
  3. I/O(输入/输出)
  4. Docker中安装Nexus3
  5. OA实例
  6. 判断Excel版本信息
  7. Babel安装在本地并用webstrom由ES6转Es5
  8. poj 3352 Road Construction(边双连通分量+缩点)
  9. pandas重新索引
  10. mysql学习笔记四 —— AB复制