浅谈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 相关文章推荐
QueryPath PHP 中的jQuery
Apr 11 PHP
php中获得视频时间总长度的另一种方法
Sep 15 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
php编写简单的文章发布程序
Jun 18 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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
随机头像PHP版
2006/10/09 PHP
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP 上传文件大小限制
2009/07/05 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
PHP7 其他修改
2021/03/09 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
Node.js文件操作详解
2014/08/16 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
javascript中的面向对象
2017/03/30 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
微信小程序自定义单项选择器样式
2019/07/25 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python FFT合成波形的实例
2019/12/04 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
用python发送微信消息
2020/12/21 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
美德少年事迹材料
2014/01/23 职场文书
中班中秋节活动反思
2014/02/18 职场文书
学年个人总结范文
2015/03/05 职场文书
常用的Python代码调试工具总结
2021/06/23 Python