浅谈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实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
php数组转换js数组操作及json_encode的用法详解
Oct 26 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
php实现过滤UBB代码的类
Mar 12 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
php中static和const关键字用法分析
Dec 07 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 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
第五节--克隆
2006/11/16 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
php常用Stream函数集介绍
2013/06/24 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
pytorch中index_select()的用法详解
2021/01/06 Python
什么是规则表达式
2012/05/03 面试题
前台文员岗位职责及工作流程
2013/11/19 职场文书
亮化工程实施方案
2014/03/17 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
答谢词范文
2015/01/05 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android