PHP的Trait机制原理与用法分析


Posted in PHP onOctober 18, 2019

本文实例讲述了PHP的Trait机制原理与用法。分享给大家供大家参考,具体如下:

Trait介绍:

1、自PHP5.4起,PHP实现了一种代码复用的方法,称为trait。
2、Trait是为类似PHP的单继承语言二准备的一种代码复用机制。
3、Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。
4、trait实现了代码的复用,突破了单继承的限制;
5、trait是类,但是不能实例化。
6、当类中方法重名时,优先级,当前类>trait>父类;
7、当多个trait类的方法重名时,需要指定访问哪一个,给其它的方法起别名。

示例:

trait Demo1{
 public function hello1(){
  return __METHOD__;
 }
}
trait Demo2{
 public function hello2(){
  return __METHOD__;
 }
}
class Demo{
 use Demo1,Demo2;//继承Demo1和Demo2
 public function hello(){
  return __METHOD__;
 }
 public function test1(){
  //调用Demo1的方法
  return $this->hello1();
 }
 public function test2(){
  //调用Demo2的方法
  return $this->hello2();
 }
}
$cls = new Demo();
echo $cls->hello();
echo "
";
echo $cls->test1();
echo "
";
echo $cls->test2();

运行结果:

Demo::hello
Demo1::hello1
Demo2::hello2

多个trait方法重名:

trait Demo1{
 public function test(){
  return __METHOD__;
 }
}
trait Demo2{
 public function test(){
  return __METHOD__;
 }
}
class Demo{
 use Demo1,Demo2{
  //Demo1的hello替换Demo2的hello方法
  Demo1::test insteadof Demo2;
  //Demo2的hello起别名
  Demo2::test as Demo2test;
 }
 public function test1(){
  //调用Demo1的方法
  return $this->test();
 }
 public function test2(){
  //调用Demo2的方法
  return $this->Demo2test();
 }
}
$cls = new Demo();
echo $cls->test1();
echo "
";
echo $cls->test2();

运行结果:

Demo1::test
Demo2::test

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
两种php调用Java对象的方法
Oct 09 PHP
PHP初学者头疼问题总结
Oct 09 PHP
php 缓存函数代码
Aug 27 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
PHP文章按日期(月日)SQL归档语句
Nov 29 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
php数据序列化测试实例详解
Aug 12 PHP
tp5修改(实现即点即改)
Oct 18 #PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 #PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 #PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 #PHP
tp5.1 实现setInc字段自动加1
Oct 18 #PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 #PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 #PHP
You might like
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
javaScript基础语法介绍
2015/02/28 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
vuejs2.0实现一个简单的分页示例
2017/02/22 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
Python获取apk文件URL地址实例
2013/11/01 Python
python转换摩斯密码示例
2014/02/16 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
python输入多行字符串的方法总结
2019/07/02 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
Python远程linux执行命令实现
2020/11/11 Python
2013届毕业生求职信范文
2013/11/20 职场文书
人事任命书怎么写
2014/06/05 职场文书
欢迎领导标语
2014/06/27 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
vue封装数字翻牌器
2022/04/20 Vue.js