浅谈PHP中的Trait使用方法


Posted in PHP onMarch 22, 2019

概述

在PHP中有一种代码复用的技术, 因为单继承的问题, 有些公共方法无法在父类中写出, 而 Trait可以应对这种情况, 它可以定义一些复用的方法, 然后在你需要使用的类中将其引入即可.

刚开始的时候给我的感觉就是将trait代码块直接拿到类中的意思, 但后来我发现, 我太天真了.

PHP中的Trait用法:

浅谈PHP中的Trait使用方法

问题

当我第一次使用的时候, 因为之前一直使用抽象类, 或者定义内部对象, 然后调用内部对象中的方法, 所以我当时有了以下几个问题:

1.能否引入多个, 如果可以的话, 同名方法如何处理

2.引入方法与现有方法重名时, 如何解决

3.能否定义抽象方法, 因为有些方法需要知道使用时的情况, 在抽象类中, 这种情况一般通过调用抽象方法来解决

4.能否定义字段

5.能否将字段或方法定义为静态

6.能否对方法进行权限控制

答疑

1. Trait 可以引入多个, 多个trait中存在同名方法时, 需要指定使用哪个方法, 如下:

浅谈PHP中的Trait使用方法

2.引入方法与现有方法重名时, 会优先调用类中已定义的方法, 其优先级顺序为: 当前类方法>trait方法>父类方法

3. trait 中可以定义抽象方法, 语法与抽象类相同

浅谈PHP中的Trait使用方法

4.trait 中可以定义字段, 语法与类相同

浅谈PHP中的Trait使用方法

5. 可以定义静态方法与静态字段

浅谈PHP中的Trait使用方法

6. 可以进行方法权限的控制

浅谈PHP中的Trait使用方法

7. 另外, 在trait 代码块中还可以引入其他trait代码块, 语法与类中引入相同:

浅谈PHP中的Trait使用方法

总结

至此, 我发现了一个新的问题, 这个 trait 与抽象类有什么区别? 说什么代码复用, 这不就是多继承么? trait与抽象类功能上有区别么? 抽象类能干的, trait都能干啊.

思前想后, 我觉得区别还是有的, 虽然说他们两个看着很像, 功能相似, 但是正如抽象类与接口一样(虽然这两者不同, 接口不能定义方法), 接口更侧重于定义一组公共的方法, 一种规范, 而抽象类则侧重于将子类中公共的方法进行抽离, 提高代码的复用.

trait 与抽象类的侧重点也不相同

trait 侧重于定义共用的代码片段, 它并不管引用此片段的类是干什么的, 只要你需要, 就可以拿走去用, 简单说就是 trait 并不约束类的类型, 而仅仅定义方法

抽象类则不同, 既然你继承我, 那你干的事情肯定跟我是一样的, 不能抽象类是去与数据库交互的, 你子类去写脚本了. 所以抽象类相对 trait 更侧重于 类型的约束.

以上所述是小编给大家介绍的PHP中的Trait使用方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
同时提取多条新闻中的文本一例
Oct 09 PHP
PHP 文件缓存的性能测试
Apr 25 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
PHP网站备份程序代码分享
Jun 10 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
PHP中单引号与双引号的区别分析
Aug 19 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
CI框架中$this->load->library()用法分析
May 18 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
Laravel 实现密码重置功能
Feb 23 PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 PHP
PHP dirname简单使用代码实例
Nov 13 PHP
PHP观察者模式定义与用法实例分析
Mar 22 #PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 #PHP
PHP中$GLOBALS与global的区别详解
Mar 21 #PHP
PHP压缩图片功能的介绍
Mar 21 #PHP
PHP应用跨时区功能的实现方法
Mar 21 #PHP
PHP时间函数使用详解
Mar 21 #PHP
PHP抽象类与接口的区别详解
Mar 21 #PHP
You might like
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
Javascript 继承机制的实现
2009/08/12 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
javascript每日必学之多态
2016/02/23 Javascript
Nodejs获取网络数据并生成Excel表格
2020/03/31 NodeJs
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
vue路由权限校验功能的实现代码
2020/06/07 Javascript
创建pycharm的自定义python模板方法
2018/05/23 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
预备党员综合考察材料
2014/05/31 职场文书
诚信考试主题班会
2015/08/17 职场文书
趣味运动会广播稿
2015/08/19 职场文书