一、什么是Traits

PHP 5.4中的traits,是新引入的特性,其实际的目的,是为了解决php的单继承问题,用于实现代码重用的方法。
Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化。
php是一种单一继承的语言,我们无法像java一样在一个class中extends多个基类来实现代码重用,现在Traits能解决这一代码重用的问题,它能让开发者在多个不同的class中实现代码重用。

Traits和class在语义的定义上都是为了减少代码的复杂性,避免多重继承的问题。

二、Traits的特性

1、实例参考链接:

https://segmentfault.com/a/1190000002970128

2、特性参考链接:

https://blog.csdn.net/longlongmylove/article/details/7521379

3、继承 VS 多态 VS Trait

参考链接:http://www.jb51.net/article/105579.htm

三、Traits在laravel中的使用

话说一直觉得laravel中的use很方面,能直接调用封装类的方法。今天看到一篇博主的文章,才知道laravel已经大量使用了Traits特性。

总结:
1、trait本质上还是一个类
2、接口(interface)规定了方法的定义, trait规定了方法的实现
3、可以认为A类D类等等其他类在需要ccc方法的时候包含了trait

综上, trait是PHP实现多继承的一种折中的方法, 姑且叫它”假多继承”, 可以认为一个类(A类)包含了另一个类E(trait), 最终目的是为了实现代码复用.

参考链接:https://zhuanlan.zhihu.com/p/31154445

总体来说,Traits的出现大大方便了我们的开发,毕竟不能多继承是真的不方便,特别是对于大型项目来说。哪怕只是“伪继承”也总比没有好。很多前辈们总结的已经很到位了,我这边只是相当于记个笔记。

end

php的Traits属性以及基本用法相关推荐

  1. python定义一个类和子类_Python面向对象class类属性及子类用法分析

    本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...

  2. listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法

    先看下简单的布局代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  3. html div box,CSS box-sizing属性的正确用法

    CSS box-sizing属性的正确用法 CSS自定义属性(变量) CSS box-sizing属性允许我们在元素的总宽度和高度中包含填充和边框. 没有CSS box-sizing属性 默认情况下, ...

  4. Position属性之relative用法

    Relative是position的一个属性,是相对定位,通过本篇文章给大家介绍Position属性之relative用法,对position属性relative相关知识感兴趣的朋友一起学习吧 Rel ...

  5. CSS3 box-shadow属性设置阴影效果用法大全

    CSS3 box-shadow 属性用来向边框添加一个或多个阴影效果,该属性是由逗号分隔的阴影列表,每个阴影由 2-4 个长度值.可选的颜色值以及可选的 inset 关键词来规定,省略长度的值是 0. ...

  6. 给html5标签设置手机号码格式化,meta标签name=format-detection属性写法及用法

    meta标签中name="format-detection"属性作用是在手机端浏览html网页时,用于识别电话号码.电子邮箱和地图位置的格式! 用法格式: 将代码添加到网页的 和之 ...

  7. CSS3中的透明属性opacity的用法实例

    实例 设置 div 元素的不透明级别: div { opacity:0.5; } 完整例子: <!DOCTYPE html> <html> <head> <s ...

  8. Android属性动画进阶用法

    2019独角兽企业重金招聘Python工程师标准>>> 在上周二文章中介绍补间动画缺点的时候有提到过,补间动画是只能对View对象进行动画操作的.而属性动画就不再受这个限制,它可以对 ...

  9. vuex的计算属性_vue中vuex的五个属性和基本用法

    VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data ). Vuex有五个核心概念: state, ge ...

最新文章

  1. OpenCV 4.5.4 刚刚发布!新增SoftNMS、DNN模型8位量化等功能
  2. 矩阵连乘问题(动态规划算法)
  3. python对文件中的关键词查找替换,实现自动获取配置
  4. Nacos配置中心用法详细介绍
  5. mysql的length函数和char_length中文字符长度计算函数
  6. JSP常用Form表单控件
  7. SAP OData schema version and backend version
  8. 全局变量求平均分最高分最低分_想去江苏读大学,2021届山东考生需要多少分?...
  9. Cyrus SASL Libary学习
  10. 如何用阿里云服务器建立一个wordpress网站
  11. 【JAVA】第十一届蓝桥杯省模拟赛答案(本科组)
  12. 黎曼猜想能用计算机算吗,关于黎曼猜想的计算机验证
  13. mstar的android方案,Mstar Android 方案.pdf
  14. mysql就业方向_SQL数据库专业的就业方向
  15. Google浏览器被搜狗篡改怎么恢复?
  16. 【Python小知识】:什么是序列解包
  17. 全球及中国地球物理处理和成像行业研究及十四五规划分析报告
  18. 以MacOS 13为例,VMware 16安装MacOS
  19. 23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态
  20. 【暑期集训第一周:搜索】【DFSBFS】

热门文章

  1. CSS样式----块级元素和行内元素
  2. CVPR‘22 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向
  3. tensorrt 低精度推理
  4. ImportError: libopenblas.so.0: cannot open shared object file
  5. package main: read unexpected NUL in input
  6. gevent -1073740791
  7. python 路径双斜杠问题
  8. Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV
  9. Cannot find module with tag 'cpufeatures' in import path
  10. 为什么wait和notify只能在synchronized中?