php的Traits属性以及基本用法
一、什么是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属性以及基本用法相关推荐
- python定义一个类和子类_Python面向对象class类属性及子类用法分析
本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...
- listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法
先看下简单的布局代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- html div box,CSS box-sizing属性的正确用法
CSS box-sizing属性的正确用法 CSS自定义属性(变量) CSS box-sizing属性允许我们在元素的总宽度和高度中包含填充和边框. 没有CSS box-sizing属性 默认情况下, ...
- Position属性之relative用法
Relative是position的一个属性,是相对定位,通过本篇文章给大家介绍Position属性之relative用法,对position属性relative相关知识感兴趣的朋友一起学习吧 Rel ...
- CSS3 box-shadow属性设置阴影效果用法大全
CSS3 box-shadow 属性用来向边框添加一个或多个阴影效果,该属性是由逗号分隔的阴影列表,每个阴影由 2-4 个长度值.可选的颜色值以及可选的 inset 关键词来规定,省略长度的值是 0. ...
- 给html5标签设置手机号码格式化,meta标签name=format-detection属性写法及用法
meta标签中name="format-detection"属性作用是在手机端浏览html网页时,用于识别电话号码.电子邮箱和地图位置的格式! 用法格式: 将代码添加到网页的 和之 ...
- CSS3中的透明属性opacity的用法实例
实例 设置 div 元素的不透明级别: div { opacity:0.5; } 完整例子: <!DOCTYPE html> <html> <head> <s ...
- Android属性动画进阶用法
2019独角兽企业重金招聘Python工程师标准>>> 在上周二文章中介绍补间动画缺点的时候有提到过,补间动画是只能对View对象进行动画操作的.而属性动画就不再受这个限制,它可以对 ...
- vuex的计算属性_vue中vuex的五个属性和基本用法
VueX 是一个专门为 Vue.js 应用设计的状态管理构架,统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data ). Vuex有五个核心概念: state, ge ...
最新文章
- OpenCV 4.5.4 刚刚发布!新增SoftNMS、DNN模型8位量化等功能
- 矩阵连乘问题(动态规划算法)
- python对文件中的关键词查找替换,实现自动获取配置
- Nacos配置中心用法详细介绍
- mysql的length函数和char_length中文字符长度计算函数
- JSP常用Form表单控件
- SAP OData schema version and backend version
- 全局变量求平均分最高分最低分_想去江苏读大学,2021届山东考生需要多少分?...
- Cyrus SASL Libary学习
- 如何用阿里云服务器建立一个wordpress网站
- 【JAVA】第十一届蓝桥杯省模拟赛答案(本科组)
- 黎曼猜想能用计算机算吗,关于黎曼猜想的计算机验证
- mstar的android方案,Mstar Android 方案.pdf
- mysql就业方向_SQL数据库专业的就业方向
- Google浏览器被搜狗篡改怎么恢复?
- 【Python小知识】:什么是序列解包
- 全球及中国地球物理处理和成像行业研究及十四五规划分析报告
- 以MacOS 13为例,VMware 16安装MacOS
- 23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态
- 【暑期集训第一周:搜索】【DFSBFS】
热门文章
- CSS样式----块级元素和行内元素
- CVPR‘22 最新106篇论文分方向整理|包含目标检测、动作识别、图像处理等32个方向
- tensorrt 低精度推理
- ImportError: libopenblas.so.0: cannot open shared object file
- package main: read unexpected NUL in input
- gevent -1073740791
- python 路径双斜杠问题
- Win7x64+VS2012+OpenCV2.4.3+CMake2.8.10+TBB41重编译OpenCV
- Cannot find module with tag 'cpufeatures' in import path
- 为什么wait和notify只能在synchronized中?