浅谈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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
php学习之简单计算器实现代码
Jun 09 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
PHP中nowdoc和heredoc使用需要注意的一点
Mar 21 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
python模拟鼠标拖动操作的方法
2015/03/11 Python
python生成随机mac地址的方法
2015/03/16 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python通过zabbix api获取主机
2018/09/17 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
python绘制简单彩虹图
2018/11/19 Python
django url到views参数传递的实例
2019/07/19 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
pandas apply多线程实现代码
2020/08/17 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
自荐信怎么写好
2013/11/11 职场文书
名人演讲稿范文
2013/12/28 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书