浅谈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 相关文章推荐
php 静态页面中显示动态内容
Aug 14 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
php打造属于自己的MVC框架
Mar 07 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 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学习之PHP变量
2006/10/09 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
理解JavaScript中的事件
2006/09/23 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
Python中for循环控制语句用法实例
2015/06/02 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
Python 处理图片像素点的实例
2019/01/08 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
应届生如何写自荐信
2014/01/05 职场文书
大学考试作弊检讨书
2014/01/30 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
团队拓展活动方案
2014/08/28 职场文书
少先队活动总结
2014/08/29 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
校车安全管理责任书
2015/05/11 职场文书
郭明义观后感
2015/06/08 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP